Giả sử chúng ta có hai danh sách liên kết đã được sắp xếp L1 và L2, chúng ta phải tạo một danh sách liên kết được sắp xếp mới có chứa giao điểm của hai danh sách này.
Vì vậy, nếu đầu vào là L1 =[2, 4, 8] L2 =[3, 4, 8, 10], thì đầu ra sẽ là [4, 8,]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- head:=một nút mới có giá trị 0
- cur:=head
- trong khi l1 và l2 không trống, hãy thực hiện
- nếu giá trị của l1
- l1:=tiếp theo của l1
- nếu giá trị của l1
- ngược lại khi giá trị của l2
- l2:=tiếp theo của l2
- next of cur:=một nút mới có giá trị giống với giá trị của l1
- l1:=tiếp theo của l1
- l2:=tiếp theo của l2
- cur:=next of cur
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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, l1, l2): head = cur = ListNode(0) while l1 and l2: if l1.val < l2.val: l1 = l1.next elif l2.val < l1.val: l2 = l2.next else: cur.next = ListNode(l1.val) l1 = l1.next l2 = l2.next cur = cur.next return head.next ob = Solution() L1 = make_list([2, 4, 8]) L2 = make_list([3, 4, 8, 10]) print_list(ob.solve(L1, L2))
Đầu vào
[2, 4, 8], [3, 4, 8, 10]
Đầu ra
[4, 8, ]