Python 中移除連結串列的倒數第 N 個節點
假設我們有一個連結串列。我們必須移除連結串列的倒數第 N 個節點,然後返回其頭部。因此,如果列表類似於 [1, 2, 3, 4, 5, 6] 並且 n = 3,則返回的列表將為 [1, 2, 3, 5, 6]。
為了解決這個問題,我們將遵循以下步驟:
- 如果頭部之後沒有節點,則返回 None
- front := head,back := head,counter := 0,found := false
- 當 counter <= n 時
- 如果 front 不存在,則將標誌設定為 true,並退出迴圈
- front := front 的下一個節點,並將 counter 加 1
- 當 front 存在時
- front := front 的下一個節點
- back := back 的下一個節點
- 如果標誌為 false,則
- temp := back 的下一個節點
- back 的下一個節點 := temp 的下一個節點
- temp 的下一個節點 := None
- 否則 head := head 的下一個節點
- 返回 head
示例(Python)
讓我們看看下面的實現,以便更好地理解:
class ListNode: def __init__(self, data, next = None): self.val = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head def print_list(head): ptr = head print('[', end = "") while ptr: print(ptr.val, end = ", ") ptr = ptr.next print(']') class Solution(object): def removeNthFromEnd(self, head, n): if not head.next: return None front=head back = head counter = 0 flag = False while counter<=n: if(not front): flag = True break front = front.next counter+=1 while front: front = front.next back = back.next if not flag: temp = back.next back.next = temp.next temp.next = None else: head = head.next return head head = make_list([1,2,3,4,5,6]) ob1 = Solution() print_list(ob1.removeNthFromEnd(head, 3))
輸入
[1,2,3,4,5,6] 3
輸出
[1,2,3,5,6]
廣告