你好,我是苦酒
欢迎访问我的个人博客:苦酒
1. 题目描述
输入一个链表,反转链表后,输出新链表的表头。
2. 题目分析
- 链表如下所示:
. - 首先,定义三个结点,分别指向如下:
p1 = null;
p2 = head;
p3 = head.next;
- 将p2.next(此刻连接1~2的剪头)指向p1,如下所示:
- 可以看到,第一个结点(1)已经完成。因为1~2的链表已经断开,无法遍历,所以,用p1来代替p2,用p2来代替p3,p3向前移,得到如下所示:
- 继续上述步骤,得到:
- 注意当达到最后时,如下:
需要判断p3所指的结点,是不是null,避免越界事件的发生,题主一开始忘记考虑越界。
3. 题目代码
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;
}
}