链表-Reverse Linked List(反转单向链表)
2016-04-16 07:20
363 查看
问题描述:
Reverse a singly linked list.click to show more hints.
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
思考:
用遍历和递归两种方式实现,使用遍历很好理解,考虑使用三个索引,分别为头head,头后面的一个Next和Next后面的nextNext,head的next为空不说了,关键在每一次访问中的Next的next引用需要变化,但是又是单项链表next变化,后面的节点就找不到了,这就是nextNext的作用。然后是使用递归,参考了别人的例子,用只有两个节点的特殊链表就可以轻松理解。代码(java):
1.遍历public ListNode reverseList(ListNode head) { if(head == null || head.next == null){ return head; } ListNode next; ListNode nextNext; next = head.next; nextNext = next.next; head.next = null; while(nextNext!=null){ next.next = head; head = next; next = nextNext; nextNext = nextNext.next; } next.next = head; head = next; return head; }
2.递归
public ListNode reverseList(ListNode head) { if(head==null) return null; if(head.next==null) return head; ListNode p = head.next; ListNode n = reverseList(p); head.next = null; p.next = head; return n; //递归求法 }
相关文章推荐
- [C/C++]反转链表
- 文件遍历排序函数
- C#实现基于链表的内存记事本实例
- Lua 学习笔记之C API 遍历 Table实现代码
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#中遍历Hashtable的4种方法
- WinForm实现按名称递归查找控件的方法
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#中的尾递归与Continuation详解
- Erlang中遍历取出某个位置的最大值代码
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- C++实现图的邻接表存储和广度优先遍历实例分析
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- C++利用静态成员或类模板构建链表的方法讲解
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- C++实现简单的学生管理系统