做题记录:
使用迭代的方式反转
构建节点pre=null, cur=head, next=head.next.
先反转第一个节点,直接使当前节点指向pre,然后当前节点指向cur,cur指向next,next节点指向下一个节点。
直到next节点指向null.
初始化状态(两行为一组状态,其中第一行的p/c/n是pre/cur/next的缩写,第二行n是null的缩写)
p c n
n 1->2->3
中间态
p c n
n<-1 2->3
p c n
n<-1 2->3->null
p c n
n<-1<-2 3->null
p c n
n<-1<-2 3->null
循环结束后,将cur指向pre
p c n
n<-1<-2<-3 null
最后,直接返回cur即是反转之后的链表。
附上代码:
public ListNode reverseList(ListNode head) {
if (head==null || head.next==null){
return head;
}
ListNode pre = null;
ListNode cur = head;
ListNode next = head.next;
while (next!=null){
cur.next = pre;
pre = cur;
cur = next;
next = next.next;
}
cur.next = pre;
return cur;
}