逆向遍历链表

Posted wangchaomahan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆向遍历链表相关的知识,希望对你有一定的参考价值。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 /*
 4 从尾到头打印链表。
 5 思路:利用递归调用逐级返回的特性,也就是栈的特性:先进后出,后进先出。
 6 */
 7 typedef struct node
 8  {
 9      int data;
10       struct node * next;
11  }NODE;
12  NODE * createList()
13 {
14      NODE * head = (NODE *)malloc(sizeof(NODE));
15      head->next = NULL;
16  
17      return head;
18  }
19  void insertNode(NODE *head,int insertData)
20  {
21      NODE * sur = (NODE *)malloc(sizeof(NODE));
22      sur->data = insertData;
23 
24      sur->next = head->next;
25      head->next = sur;
26  
27  }
28  void traverList(NODE *head)
29  {
30      int i = 1;
31      head = head->next;
32      while(head)
33      {
34          printf("第%d结点 = %d
",i,head->data);
35         head = head->next;
36          i++;
37     }
38  }
39  //逆向遍历
40  void RtraverList(NODE *head)
41  {
42      if(head == NULL)
43          return ;
44      else
45      {
46          RtraverList(head->next);
47          printf("%d
",head->data);
48      }
49  }
50 
51  
52  int main(void)
53  {
54      NODE *head = createList();
55      for(int i = 0;i<5;i++)
56          insertNode(head,rand()%100);
57      traverList(head);
58      printf("逆向遍历
");
59      head = head->next;//逆向遍历注意点:头结点的数据域为空,所以要提前跳过头结点。不然递归逐级返回会打印头结点的数据域。
60      RtraverList(head);
61      return 0;
62  }

 

以上是关于逆向遍历链表的主要内容,如果未能解决你的问题,请参考以下文章

链表的遍历-逆向输出2-辅助栈

List逆向遍历、反向遍历--Iterator详解

[剑指Offer] 从尾到头打印链表

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

链表和双指针框架

817. Linked List Components - LeetCode