給定乙個鍊錶,一次反轉鍊錶k的節點並返回其修改後的列表。
k是乙個正整數,並且小於或等於鏈結列表的長度。如果節點數不是k的倍數,那麼最後剩下的節點應保持原樣。
對於k = 2,您應該返回:2->1->4->3->5
對於k = 3,您應該返回:3->2->1->4->5
反轉從位置m到n的鍊錶。請使用一趟掃瞄完成反轉。
說明:
1 ≤ m ≤ n ≤ 鍊錶長度。
輸入: 1->2->3->4->5->null, m = 2, n = 4
輸出: 1->4->3->2->5->null
思路:找到要反轉的然後一步步反轉,最後再接上
class solution:
def reversebetween(self, head: listnode, m: int, n: int) -> listnode:
x = dummy = listnode(0)
dummy.next = head
for _ in range(m - 1): #找點
x = x.next
current, previous = x.next, none
for _ in range(n - m + 1):
current.next, previous, current = previous, current, current.next#反轉
x.next.next = current #接上
x.next = previous
return dummy.next
反轉乙個單鏈表。
輸入: 1->2->3->4->5->null
輸出: 5->4->3->2->1->null
思路:我記得學資料結構學過乙個頭插法
class solution:
def reverselist(self, head: listnode) -> listnode:
if not head or not head.next:
return head
new = none
while head:
new,new.next,head=head,new,head.next
return new
鍊錶的翻轉
如何快速的實現鍊錶的翻轉,比如鍊錶a資料為 str1,str2,str3,str4,str5,str6 翻轉後則變為 str6,str5,str4,str3,str2,str1 針對上述問題我能想到的一種辦法就是以壓棧的方式來實現,其實現思路相對較為簡單,通過定義乙個鍊錶資料結構的資料棧,遍歷鍊錶,...
鍊錶的翻轉
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。struct listnode 方法一 建立節點指標型別堆疊,遍歷鍊錶,將指標壓棧,順次出棧,實現反轉。這個占用記憶體空間較大。listnode reverselist listnode phead 建立鍊錶list list phead if list...
鍊錶翻轉的方法
鍊錶的翻轉是程式設計師面試 現頻度最高的問題之一,常見的解決方法分為遞迴和迭代兩種。最近在複習的時候,發現網上的資料都只告訴了怎麼做,但是根本沒有好好介紹兩種方法的實現過程與原理。所以我覺得有必要好好的整理一篇博文,來幫忙大家一步步理解其中的實現細節。我們知道迭代是從前往後依次處理,直到迴圈到鏈尾 ...