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

Hợp nhất hai danh sách liên kết đã sắp xếp trong Python


Cho hai danh sách liên kết đã sắp xếp A, B. Hợp nhất thành một danh sách đã sắp xếp. Ví dụ: A=[1,2,4,7], B=[1,3,4,5,6,8] → [1,1,2,3,4,4,5,6,7,8].

Giải pháp

Đệ quy:

  • Nếu A rỗng → B; nếu B rỗng → A.
  • Nếu A.val <= B.val: A.next = merge(A.next, B), return A.
  • Ngược lại: B.next = merge(A, B.next), return B.

Ví dụ

Triển khai Python:

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 mergeTwoLists(self, l1, l2): 
        if not l1: 
            return l2 
        if not l2: 
            return l1 
        if(l1.val<=l2.val): 
            l1.next = self.mergeTwoLists(l1.next,l2) 
            return l1 
        else: 
            l2.next = self.mergeTwoLists(l1,l2.next) 
            return l2 
head1 = make_list([1,2,4,7]) 
head2 = make_list([1,3,4,5,6,8]) 
ob1 = Solution() 
head3 = ob1.mergeTwoLists(head1,head2) 
print_list(head3)

Đầu vào

head1 = make_list([1,2,4,7]) head2 = make_list([1,3,4,5,6,8])

Đầu ra

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