反轉乙個單鏈表。
示例:
輸入:1->2->3->4->5->null高階:輸出:5->4->3->2->1->null
你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?
# definition for singly-linked list.
# class listnode(object):
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
(object):
defreverselist
(self, head)
:"""
:type head: listnode
:rtype: listnode
"""l1 = l2 =head
tmp =
while l1:
tmp.insert(
0, l1.val)
l1 = l1.
next
l1 = head
for _ in tmp:
l1.val = _
l1 = l1.
next
return l2
執行用時 : 52 ms, 在reverse linked list的python提交中擊敗了14.81% 的使用者借用了額外空間完成了。記憶體消耗 : 13.5 mb, 在reverse linked list的python提交中擊敗了48.24% 的使用者
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
reverselist
(self, head)
:"""
:type head: listnode
:rtype: listnode
"""prev =
none
curr = head
while curr :
tmp = curr.
next
curr.
next
= prev
prev = curr
curr = tmp
return prev
執行用時 : 56 ms, 在reverse linked list的python提交中擊敗了10.06% 的使用者記憶體消耗 : 13.4 mb, 在reverse linked list的python提交中擊敗了49.72% 的使用者
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
reverselist
(self, head)
:"""
:type head: listnode
:rtype: listnode
"""p, rev = head,
none
while p:
rev, rev.
next
, p = p, rev, p.
next
return rev
執行用時 : 52 ms, 在reverse linked list的python提交中擊敗了14.81% 的使用者記憶體消耗 : 13.5 mb, 在reverse linked list的python提交中擊敗了45.99% 的使用者
LeetCode 反轉鍊錶
反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?思路 雙指標,先用乙個指標算出鍊錶結點個數n,每次快指標從頭往先前移動n 步,慢指標往前移動1步進行交換即可。definition for sin...
LeetCode 反轉鍊錶
反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 思路分析 直接一趟掃瞄即可。方法二 遞迴 definition for singly linked list.struct listnode class solution listnode reversea...
反轉鍊錶 LeetCode
遞迴版本稍微複雜一些,其關鍵在於反向工作。假設列表的其餘部分已經被反轉,現在我該如何反轉它前面的部分?假設列表為 n1 nk 1 nk nk 1 nm 若從節點 nk 1 到 nm 已經被反轉,而我們正處於 nk n1 nk 1 nk nk 1 nm 我們希望 nk 1 的下乙個節點指向 nk 所以...