剑指Offer:反转链表【24】
题目描述
输入一个链表,反转链表后,输出新链表的表头。
解题分析
这道题我才发现我是属于那种真的笨,图都画出来了流程写不出来。看了别人的代码,总觉得自己差一步。
这也是链表题的一个特点,指针的复杂变化。首先毋庸置疑肯定要有三个指针,他们的排列位置如下图第一行所示。
然后第二个指针,即cur的next一转,指向第一个,即pre,这是就会出现二指向三的指针断裂,所以tmp指针需要时刻指向cur指针的下一个。
Java题解
public ListNode ReverseList(ListNode head) { if(head==null) return null; ListNode reversedHead=null; ListNode current=head; ListNode tmp=null; ListNode pre=null; while(current!=null){ tmp=current.next; //tmp指针时刻指向cur的下一个节点位置 current.next=pre; //cur下一个位置指向前一个节点 if(tmp==null) //如果结果为空,返回当前节点,即为倒置后的头结点 reversedHead=current; pre=current; //pre指向当前节点 current=tmp; //cur指向下一个节点,然后重复开始此过程 } return reversedHead; }