給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。
示例:給定乙個鍊錶: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鍊錶變為 1->2->3->5.
說明:給定的 n 保證是有效的。
高階:你能嘗試使用一趟掃瞄實現嗎?
'''
思路1:將鍊錶儲存為list,刪除倒數第n個值,再將list轉換為鍊錶
思路2:雙指標法,快慢指標相差為n
'''class listnode:
def __init__(self, x):
self.val = x
self.next = none
class solution:
def reverse(self, link):
dummy = listnode(-1)
while link:
tmp = listnode(link.val)
tmp.next = dummy.next
dummy.next = tmp
link = link.next
return dummy
def removenthfromend1(self, head, n):
tmp =
while head:
head = head.next
del tmp[len(tmp) - n]
head = res = listnode(-1)
for i in tmp:
cur = listnode(i)
res.next = cur
res = res.next
return head.next
def removenthfromend(self, head, n):
slow = fast = dummy = listnode(-1)
dummy.next = head
for i in range(n):
fast = fast.next
while fast.next:
fast = fast.next
slow = slow.next
slow.next = slow.next.next
return dummy.next
if __name__ == '__main__':
l1 = listnode(1)
l2 = listnode(2)
l3 = listnode(3)
l1.next = l2
l2.next = l3
s = solution()
h = s.removenthfromend(l1, 3)
while h:
print(h.val)
h = h.next
19 刪除鍊錶的倒數第N個節點
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?說實話,就我的水平而言感覺這道題坑點還真不少,先來我的乙個粗糙版...
19 刪除鍊錶的倒數第N個節點
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.說明 給定的 n 保證是有效的。高階 你能嘗試使用一趟掃瞄實現嗎?class solution def removenthfrom...
19 刪除鍊錶的倒數第N個節點
給定乙個鍊錶,刪除鍊錶的倒數第n個節點,並且返回鍊錶的頭結點。給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.給定的n保證是有效的。首先遍歷得出鍊錶的長度l,然後刪除第l n個節點 definition for singly linked list....