如何反轉乙個鍊錶

2021-09-19 08:34:29 字數 955 閱讀 9632

最近在刷leetcode中關於鍊錶的題,發現很多題都涉及到了了鍊錶的反轉

給出乙個鍊錶[1, 2, 3, 4, 5]

反轉為[5, 4, 3, 2, 1]

解決該問題可以用迴圈解決,而核心思想便是在迴圈中每次只讓第i個元素插入到鍊錶的頭部

在迴圈之前鍊錶長這樣

1-> 2-> 3-> 4-> 5
第一次迴圈

2-> 1-> 3-> 4-> 5
第二次迴圈

3-> 2-> 1-> 4-> 5
如何寫**來解決?

對於上述過程,很顯然我們需要乙個指標一直指向頭部之前的一位,構造乙個鍊錶長這樣

null-> 1-> 2-> 3-> 4-> 5
利用指標一直指向null這個值

然後再利用乙個指標指向1這個值

完整**

struct listnode*

reverselist

(struct listnode* head)

return prev->next;

}

第一次迴圈

null-> 1-> 2-> 3-> 4-> 5

| | |

prev curr next

第二次迴圈

null-> 2-> 1-> 3-> 4-> 5

| | |

prev curr next

可以把上述**貼上到 leetcode 206. reverse linked list 跑一跑

反轉乙個鍊錶

反轉乙個單鏈表 題目源於領扣 示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題 題目分析 因為乙個單個鍊錶結點有前驅和後繼,所以我們不能像順序表那樣直接交換元素。我們需要三個指標prev,cur,next來完整...

總結 到底如何反轉乙個鍊錶

反轉鍊錶是常見題。最基本的就是給乙個鍊錶,然後反轉。如果稍微帶點花樣的話,leetcode上有一些題,比如reverse linked list ii,是叫你反轉在一定範圍內的nodes,比如從第二個node開始到第四個node結束,反轉之間的子鍊錶 再有比如reverse nodes in k g...

206 反轉鍊錶 反轉乙個單鏈表。

題解一 迭代法 在遍歷鍊錶時,將當前節點的 next 指標改為指向前乙個節點。由於節點沒有引用其前乙個節點,因此必須事先儲存其前乙個節點pre。在更改引用之前,還需要儲存後乙個節點。最後返回新的頭引用。definition for singly linked list.struct listnode...