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

โปรแกรมสลับโหนดใน Linked List ใน Python

มี linked list L และค่า k สลับโหนดที่ k จากต้นกับโหนดที่ k จากท้าย คืน linked list ที่แก้ไขแล้ว

ตัวอย่าง: L=[1,5,6,7,1,6,3,9,12], k=3 ผลลัพธ์ [1,5,3,7,1,6,6,9,12] (โหนดที่ 3 จากต้นคือ 6, จากท้ายคือ 3)

วิธีแก้ปัญหา (Two Pointers)

  1. เดิน k-1 ก้าวได้ firstNode
  2. secondNode เริ่มที่ head, เดินคู่กับ temp จน temp.next เป็น None
  3. สลับ firstNode.val กับ secondNode.val

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

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 solve(L, k):
    temp = L
    for i in range(k-1):
        temp = temp.next
    firstNode = temp
    secondNode = L
    while temp.next:
        secondNode = secondNode.next
        temp = temp.next
    firstNode.val, secondNode.val = secondNode.val, firstNode.val
    return L

L = [1,5,6,7,1,6,3,9,12]
k = 3
print(solve(make_list(L), k))

อินพุต

[1,5,6,7,1,6,3,9,12], 3

เอาต์พุต

[1, 5, 3, 7, 1, 6, 6, 9, 12]