[算法]链表的逆序遍历节点
2014-12-13 15:22
281 查看
有一个链表,知道链表头,怎么逆序打印出链表每个节点的值。
我们知道,当知道了链表头的时候,很容易顺序访问所有节点的值,但是如何逆序访问所有节点呢?
访问一棵二叉树,通常可以深度优先和广度优先访问每个节点,深度优先又分为先序,中序和后续遍历,后续遍历就是先访问树的右子树,再访问左子树,最后访问父节点,如果我们把一个链表看成是一颗单叉树,利用树的后续遍历就达到了逆序访问链表的每个节点,利用递归,实现代码如下:
我们知道,当知道了链表头的时候,很容易顺序访问所有节点的值,但是如何逆序访问所有节点呢?
访问一棵二叉树,通常可以深度优先和广度优先访问每个节点,深度优先又分为先序,中序和后续遍历,后续遍历就是先访问树的右子树,再访问左子树,最后访问父节点,如果我们把一个链表看成是一颗单叉树,利用树的后续遍历就达到了逆序访问链表的每个节点,利用递归,实现代码如下:
struct node { int val; node* next; }; void travel(node*head) { if(head && head->next) { travel(head->next); } if(head) printf("val=%d\n",head->val); } node* head = new node; head->next=NULL; head->val = 0; node *h=head; for(int i=1;i<10;i++) { node *nd = new node; nd->val = i; nd->next = NULL; h->next = nd; h = nd; } travel(head);
相关文章推荐
- 给你一个链表和一个 random函数, 设计一个算法能随机返回链表的某个节点, 要求每个节点被返回的概率一样。限制条件是只能遍历链表一次并且不能用额外空间。
- 只遍历一次单链表找出中间节点的算法
- 【算法题】一次遍历单向链表找到中间节点
- C/C++面试之算法系列--一次遍历找链表倒数第n个节点
- 算法与数据结构面试题(11)-一次遍历得到链表的中间节点
- 【算法之链表(四)】在不使用额外节点存储空间的情况下,实现单链表逆序
- 二.从零写单链表的算法之遍历节点&删除节点&逆序节点
- 算法之递归(2)- 链表遍历
- 一次遍历找链表倒数第n个节点
- 不带头节点链表逆序的两种方法
- 一步一步写算法(之创建逆序链表)
- 数据结构--二叉树--输出树中从根到每个叶子节点的路径(树遍历算法的应用) .
- 程序员面试100题(算法)之查找链表中倒数第k个节点(含单向链表的创建和打印)
- 基本算法—链表逆序
- 不使用递归和堆栈,遍历二叉树所有叶子节点的算法
- 华为机试题(8)--单向链表的建立,反转(逆序),遍历显示,删除
- (算法)输出单链表的倒数第k个节点,删除特点的节点和从链表尾一次输出节点值
- [C/C++] 先序建立二叉树| 先序、中序、后序遍历二叉树| 求二叉树深度、节点数、叶节点数 算法实现
- 寻找链表中间节点-一种高效的算法
- 算法题18 逆序(字符串、整数、单向链表)