1.题目
2.思路
1.这里使用双指针法
如上图所示,定义current和pre两个指针,让cur.next 指向 pre 这样就实现了链表的反转。
但是cur.next指向了pre后,cur后的所有元素就访问不到了(链断了),所以就需要一个next指针来保存cur后的元素。
3.代码
java
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode next = null; //注意不要在这个地方赋值 ListNode next =cur.next;
while (cur != null) {
//防止断链
next = cur.next;
//反转链表
cur.next = pre;
//移动位置
pre = cur;
cur = next;
}
return pre;
}
}
4.我的错误
java
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode next =cur.next; //我在这个地方初始化了next
while (cur != null) {
//反转
cur.next = pre;
//更新位置
pre = cur;
cur = next;
next =cur.next;
}
return pre;
}
}
这是我写的第一版,最后会报一个空指针错误。错误代码出现在循环里的这一行代码中
next =cur.next;
这是因为当反转完最后一个节点的时候,要更新位置了,cur=next 让cur已经指向了null,这时候再
使用next=cur.next,也就相当于null.next,肯定报错了。