19 刪除鍊錶的倒數第N個節點

2021-09-19 13:42:43 字數 1431 閱讀 2703

給定乙個鍊錶,刪除鍊錶的倒數第 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....