反转链表
206. 反转链表
题目描述:输入一个链表,反转链表后,输出新链表的表头。
首先明确一点,ListNode pre = head;ListNode cur = head;pre,cur只是引用变量不是对象本身!,当pre发生变化,cur也会发生变化,因为他们两指向的是同一个对象。(我刚开始以为pre,cur互补不影响,结果错了)
分析
两个指针pre,cur,pre是已经反转的头结点,初始结点是null,cur是将要反转的结点,初始结点是head。
反转:cur的后继变为pre
条件:首先保存cur现有的后继,记为tmp
while的判断条件是cur不为空
- 保存好cur的后继
- cur指向pre
- 更新pre,cur
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while(cur != null){
ListNode tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null){
return head;
}
ListNode pre = head;
ListNode cur = head.next;
pre.next = null;
while(cur != null){
ListNode tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}