Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมลบโหนดทั้งหมดในลิงก์ลิสต์ที่มีค่าเท่ากับเป้าหมายใน Python

สมมติว่ามี singly linked list และค่าเป้าหมาย เราต้องคืน linked list เดียวกันหลังจากลบโหนดที่มีค่าเท่ากับเป้าหมายทั้งหมด

เช่น ถ้าอินพุตคือ [5,8,2,6,5,2,9,6,2,4] ผลลัพธ์จะเป็น [5, 8, 6, 5, 9, 6, 4]

ขั้นตอนการแก้ปัญหา

  • head := node
  • while node และ node.next ไม่ใช่ null
    • while ค่าของ node.next == target node.next := node.next.next
    • node := node.next
  • ถ้าค่าของ head == target คืนค่า head.next มิฉะนั้น คืนค่า head

ตัวอย่างโค้ด

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:
    def solve(self, node, target):
        head = node
        while node and node.next:
            while node.next.val == target:
                node.next = node.next.next
            node = node.next
        if head.val == target:
            return head.next
        else:
            return head

ob = Solution()
head = make_list([5,8,2,6,5,2,9,6,2,4])
ob.solve(head, 2)
print_list(head)

อินพุต

[5,8,2,6,5,2,9,6,2,4]

เอาต์พุต

[5, 8, 6, 5, 9, 6, 4, ]