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; } }