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

โปรแกรมหา folded list จาก linked list ใน Python

สมมติว่ามี linked list ต้องนำครึ่งแรกมาพับทับครึ่งหลัง แล้วรวมโหนดที่ทับกันโดยบวกค่า คืน head ของลิสต์ผลลัพธ์

ตัวอย่าง: [5,8,1,2,4,7,5] ผลลัพธ์ [2,5,15,10]

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

  1. นับความยาว temp
  2. t = temp // 2, ใช้ stack เก็บค่าครึ่งแรก
  3. เดิน t ขั้น: push ค่าเข้า stack, ตัด link, ขยับ m
  4. node = m (เริ่มครึ่งหลัง)
  5. ถ้า temp คี่: m = m.next (ข้ามโหนดกลาง)
  6. วนながら m ไม่ว่าง: m.val += stack.pop(), m = m.next
  7. คืน node

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

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):
        temp = 0
        ptr = node
        while ptr:
            temp += 1
            ptr = ptr.next
        t = temp // 2
        m = node
        stk = []
        while t:
            stk.append(m.val)
            tmp = m.next
            m.next = None
            m = tmp
            t -= 1
        node = m
        if temp % 2 != 0:
            m = m.next
        while m:
            m.val += stk.pop()
            m = m.next
        return node

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

อินพุต

[5,8,1,2,4,7,5]

เอาต์พุต

[2, 5, 15, 10, ]