反轉乙個單鏈表。
示例:
輸入: 1->2->3->4->5->null高階:輸出: 5->4->3->2->1->null
你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?
解題心路:
迭代好說,遞迴:
第一思路將後面的全部翻轉好,再將最後乙個元素的next指向當前。
返回最後乙個元素的指標,那就有:
當前節點指標:head
已經翻轉的尾指標:p
p->next = head;
head->next = null;
這樣一頓操作是可以翻轉但是丟了頭指標。
leetcode 裡面的的兒子們的經典思路:
1.返回頭指標,p。p一直不變指向翻轉後的鍊錶的頭。
2.那怎麼知道返回後的鍊錶的尾指標呢,因為只有知道了尾指標我才能把新節點加進去。
3.從思路說起,翻轉函式的功能是 翻轉前面的節點並返回頭結點指標。其餘的東西不做任何改變。
4.既然沒有改變那麼head原來指向的節點也沒有改變,前面的翻轉後head 還是指向 head->next.而它就是尾。
5.這樣一來就好操作了 head->next->next = head; head->next=null;
6.解釋一下就是將head變成新的尾,並讓原來的尾指向它。
7.完
反轉乙個單鏈表
思路二 反轉乙個鍊錶 示例 結構體定義 先對原鍊錶做頭刪操作,再對新鍊錶做頭插定義乙個新head頭指標,標記為newhead,將它初始為null,並非指向null,最後我們選擇返回這個newhead指標作為新鍊錶的頭指標。定義乙個結點node作為 臨時中轉站 初始化與否並無大影響。進行迴圈遍歷鍊錶各...
206 反轉鍊錶 反轉乙個單鏈表。
題解一 迭代法 在遍歷鍊錶時,將當前節點的 next 指標改為指向前乙個節點。由於節點沒有引用其前乙個節點,因此必須事先儲存其前乙個節點pre。在更改引用之前,還需要儲存後乙個節點。最後返回新的頭引用。definition for singly linked list.struct listnode...
LeetCode 206 反轉乙個單鏈表。
我是利用棧解決鍊錶的反轉 但是這種方法效率很低。看大佬的迭代或遞迴解法很簡短而且時間複雜度和空間複雜度都很小。官網上的題解 definition for singly linked list.public class listnode class solution listnode newhead ...