【剑指offer】-反转链表-15/67

1. 题目描述

输入一个链表,反转链表后,输出新链表的表头。

2. 题目分析

  1. 链表如下所示:
    . 链表

  2. 首先,定义三个结点,分别指向如下:

    p1 = null;
    p2 = head;
    p3 = head.next;

在这里插入图片描述

  1. 将p2.next(此刻连接1~2的剪头)指向p1,如下所示:
    在这里插入图片描述

  2. 可以看到,第一个结点(1)已经完成。因为1~2的链表已经断开,无法遍历,所以,用p1来代替p2,用p2来代替p3,p3向前移,得到如下所示:

  3. 继续上述步骤,得到:
    在这里插入图片描述

  4. 注意当达到最后时,如下:
    在这里插入图片描述
    需要判断p3所指的结点,是不是null,避免越界事件的发生,题主一开始忘记考虑越界。

3. 题目代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null){
return null;
}
ListNode p1 = null;
ListNode p2 = head;
ListNode p3 = head.next;
while(p2 != null){
p2.next = p1;
p1 = p2;
p2 = p3;
if(p3 != null){
p3 = p3.next;
}
}
return p1;
}
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2017-2020 苦酒
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信