leecode206 鍊錶反轉 三種方法

2021-08-28 10:23:35 字數 741 閱讀 5601

第一種:記錄前驅,從第乙個節點開始

1.用乙個指標記錄其next的位置(防止在其指向前面節點無法指向後面的節點的位置) q=p->next

2.記錄了後面的位置,那我們可以大膽的將p->next指向前驅節點pre  p->next=pre

3.前驅節點變為當前節點 pre=p;

4.當前節點可以達到後面節點的位置,也就是預存的q的位置 p=q;(所以q的作用只是存放後繼節點的位置)

5.重複1-4的操作直到後繼節點位置為null

到最後的時候,會有點特殊。

後繼節點的next和p->next都是null,退出了迴圈,而pre是倒數第二節點。最後節點並沒有指向pre,所以需要p->next=pre;或者q->next=pre; return q;

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

p->next=pre;

return p;

}};

2.使用頭插法,新建乙個節點,每次重頭部插入(**好像一樣。。)

class solution 

p->next=tail;

tail=p;

return tail;

}};

3.使用棧 stack 先進後出 達到逆序。

206 反轉鍊錶

任務描述 思路 遇到問題 修改 迴圈前判斷傳入引數是否為空 迭代時沒有考慮l3.next none的情況 實現 definition for singly linked list.class listnode def init self,x self.val x self.next none cla...

206 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 迭代就不說了,儲存當前節點的前繼節點迴圈改變指標指向就行。我自己先寫了個遞迴的,但看了題解的遞迴,一比就比下去了。class solution def reverselist self,head listn...

206 反轉鍊錶

題目 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 思路 首先,我們建立兩個新的空節點 prev 和 newhead 我們原來的第乙個節點的下乙個節點指向prev,然後再讓prev 指向第乙個節點,這樣就完成了第乙個節點的逆置,以此類推就可以翻轉這個鍊...