สมมติว่าเราได้รับรายการเชื่อมโยงที่มีโหนดเริ่มต้นเป็น "หัว" และเลขจำนวนเต็มสองตัว m และ n เราต้องสำรวจรายการและลบโหนดบางโหนดเช่นโหนด m แรกจะถูกเก็บไว้ในรายการและโหนดถัดไป n โหนดหลังจาก m โหนดแรกถูกลบ เราดำเนินการนี้จนกว่าเราจะพบจุดสิ้นสุดของรายการที่เชื่อมโยง เราเริ่มจากเฮดโหนด และรายการลิงก์ที่แก้ไขจะถูกส่งคืน
โครงสร้างรายการที่เชื่อมโยงจะได้รับเป็น -
Node value : <integer> next : <pointer to next node>
ดังนั้น หากอินพุตเป็นเหมือนองค์ประกอบ =[1, 2, 3, 4, 5, 6, 7, 8], m =3, n =1, ผลลัพธ์จะเป็น [1, 2, 3, 5, 6 , 7, ]
ทุกโหนดหลังจาก 3 โหนดจะถูกลบในกระบวนการนี้ ดังนั้นในท้ายที่สุดรายการที่เชื่อมโยงจะมีลักษณะดังนี้ -
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ก่อนหน้า :=หัว
-
curr :=หัว
-
q :=0
-
p :=0
-
ในขณะที่สกุลเงินไม่เป็นโมฆะให้ทำ
-
q :=q + 1
-
ถ้า q เท่ากับ m แล้ว
-
สำหรับผมอยู่ในช่วง 0 ถึง n ทำ
-
ถ้า curr.next ไม่เป็นโมฆะ
-
curr :=ถัดไปของ curr
-
-
-
ถัดไปของก่อนหน้า :=ถัดไปของสกุลเงิน
-
q :=0
-
-
ก่อนหน้า :=ถัดไปของก่อนหน้า
-
curr :=ถัดไปของ curr
-
-
กลับหัว
ตัวอย่าง (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,]