LeetCode刷题206:
class Solution {
public ListNode reverseList(ListNode head) {
ListNode newhead=null;
while(head!=null){
ListNode temp=head;
head=head.next; // 这一句放到最后就会出错,最后的链表只有一个结点。
temp.next=newhead;
newhead=temp;
}
return newhead;
}
}
这道题的思路是新建一个链表,newhead,有以下几个步骤:
① 让原来链表的当前结点,head.next=newhead;
②让原来链表位置的head移向下一个结点,head=head.next;
③让新的链表的newhead往前移,因为有①,座椅newhead=head就往前移了
这里需要的事head的备份。备份为temp。
问题想通啦!!!
答案!!!
如果放在最后,这里改变的next让整个结点都往下移了,所以head右边一个箭头直接指向下面,这个时候head和temp都一起去下面了!所以要先移动head!
可恶!我怎么这个都要想!
这个还有第二个思路,嘿嘿
代码如下
class Solution {
public ListNode reverseList(ListNode head) {
ListNode newhead=null;
while(head!=null){
ListNode newwww=newhead; //newwww是用来保存已经建立好的new链表
newhead=head;
head=head.next;
newhead.next=newwww;
}
return newhead;
}
}
思路路:
大同小异 不说啦