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,]
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP