单链表的反转
来源:互联网 发布:php json数组 编辑:程序博客网 时间:2024/06/15 13:51
有两种方法,一种是非递归,另外一种是递归
非递归算法中,用到三个连续的结点,分别表示p,q,r,其中p.next = q,q.next = r,当然本身链表为空,直接返回null,如果只有一个结点,返回头结点,如果有两个结点,将q.next=p,p.next = null,否则q.next = p,p = q,q = r
代码如下:
class ListNode{ int val; ListNode next; ListNode(int x) { val = x; next = null;}}class Solution{ public ListNode reverseList(ListNode head) { if (null == head) return head; ListNode p = head; ListNode q = null, r = null; if (p.next != null) { q = p.next; r = q.next; q.next = p; p.next = null; p = q; q = r; } while (q != null) { r = q.next; q.next = p; p = q; q = r; } return p; }}
另一种解法,与上相同,只是代码更精简些
代码如下:
class ListNode{ int val; ListNode next; ListNode(int x) { val = x;}}class Solution{ public ListNode reverseListNode(ListNode head) { ListNode cur = head, pre = null, tmp = null; while (cur != null) { tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; } return pre; }}public class Main{ public static void main(String[] args) {// write your code here Solution solver = new Solution(); int[] nums = {1}; ListNode phead = null, ptail = null; for (int i = 0; i < nums.length; i++) { if (null == phead) { phead = new ListNode(nums[i]); ptail = phead; } else { ptail.next = new ListNode(nums[i]); ptail = ptail.next; } } ListNode ans = solver.reverseListNode(phead); while(ans != null) { System.out.print(ans.val + "->"); ans = ans.next; } System.out.println(); }}
在递归算法中,递归退出条件为(1)头结点为空,返回空,(2)是最后一个结点,返回最后一个结点
f(p)递归时,使用f(p.next)返回的是最后一个结点,过后需要将结点返转,p.next.next=p,如果p是头结点,将p.next=null
代码如下:
class ListNode{ int val; ListNode next; ListNode(int x) { val = x; next = null;}}class Solution{ public ListNode reverseList(ListNode head) { ListNode p = head; if (null == p) return null; if (null == p.next) { return p; } ListNode q = reverseList(p.next); p.next.next = p; if (p == head) { p.next = null; } return q; }}
0 0
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转 c++
- 单链表的反转
- 单链表的反转
- 单链表的反转问题
- 单链表的反转实现
- 2、单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表的反转
- 单链表反转的实现
- 单链表的反转
- 单链表的反转
- 写给自己
- Python 学习之集合
- leetcode--Min Stack
- cf#186-C. Mr. Kitayuta, the Treasure Hunter-dp(预推断+offset)
- Rectangle Area-带有交差集矩形面积
- 单链表的反转
- regex_iterator()的使用sregex_iterator(),cregex_iterator()
- 多线程 线程的创建方式和多线程共享资源
- C小项目——电子词典
- 位运算符基础
- 挑战密室(化学方程式)
- 静变量static、全局变量extern、局部变量、实例变量
- Oracle学习笔记——1、基本的SQL语句
- java/android基础总结2