Python程式:從連結串列中刪除m個節點後的n個節點
假設我們給定一個連結串列,其起始節點為“head”,以及兩個整數m和n。我們需要遍歷連結串列並刪除一些節點,例如保留連結串列的前m個節點,並刪除前m個節點後的n個節點。我們執行此操作,直到遇到連結串列的末尾。我們從頭節點開始,需要返回修改後的連結串列。
連結串列結構如下所示:
Node value : <integer> next : <pointer to next node>
因此,如果輸入類似於 elements = [1, 2, 3, 4, 5, 6, 7, 8],m = 3,n = 1,則輸出將為 [1, 2, 3, 5, 6, 7, ]
在此過程中,刪除3個節點後的每個節點,因此最終連結串列將如下所示:
為了解決這個問題,我們將遵循以下步驟:
prev := head
curr := head
q := 0
p := 0
當 curr 不為空時,執行以下操作:
q := q + 1
如果 q 等於 m,則執行以下操作:
對於 i 從 0 到 n,執行以下操作:
如果 curr.next 不為空,則執行以下操作:
curr := curr 的下一個節點
prev 的下一個節點 := curr 的下一個節點
q := 0
prev := prev 的下一個節點
curr := curr 的下一個節點
返回 head
示例(Python)
讓我們看看以下實現,以更好地理解:
class ListNode: def __init__(self, val=0, next=None): self.val = val 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(']') def solve(head, m, n): prev = curr = head q = 0 p = 0 while curr: q += 1 if q == m: for i in range(n): if curr.next is not None: curr = curr.next prev.next = curr.next q = 0 prev = prev.next curr = curr.next return head head = ListNode() elements = [1, 2, 3, 4, 5, 6, 7, 8] head = make_list(elements) res = solve(head, 3, 1) print_list(res)
輸入
[1, 2, 3, 4, 5, 6, 7, 8], 3, 1
輸出
[1, 2, 3, 5, 6, 7,]
廣告