Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình sắp xếp danh sách liên kết theo thứ tự tăng dần bằng Python


Cho danh sách liên kết đơn. Sắp xếp các nút theo giá trị tăng dần.

Ví dụ: [5,8,4,1,5,6,3] → [1,3,4,5,5,6,8].

Giải thuật

  • Thu thập tất cả giá trị vào mảng values.
  • Sắp xếp values.
  • Duyệt lại danh sách liên kết, gán giá trị từ values (dùng deque để pop trái hiệu quả).
  • Trả về head.

Ví dụ minh họa

import collections
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):
        values = []
        head = node
        while node:
            values.append(node.val)
            node = node.next
        values.sort()
        values = collections.deque(values)
        node = head
        while node:
            node.val = values.popleft()
            node = node.next
        return head

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

Đầu vào

[5, 8, 4, 1, 5, 6, 3]

Đầu ra

[1, 3, 4, 5, 5, 6, 8, ]