Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 두 연결 목록에서 연결 목록 교차를 찾는 프로그램

<시간/>

두 개의 정렬된 연결 목록 L1과 L2가 있다고 가정하면 이 두 목록의 교집합을 포함하는 새로운 정렬된 연결 목록을 만들어야 합니다.

따라서 입력이 L1 =[2, 4, 8] L2 =[3, 4, 8, 10]과 같으면 출력은 [4, 8, ]

가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • head :=값이 0인 새 노드
  • cur :=머리
  • l1과 l2가 비어 있지 않은 동안 do
    • l1의 값
    • l1 :=l1의 다음
  • 그렇지 않으면 l2의 값
  • l2 :=l2의 다음
  • 그렇지 않으면
    • cur의 다음:=l1의 값과 동일한 값을 가진 새 노드
    • l1 :=l1의 다음
    • l2 :=l2의 다음
    • cur :=cur의 다음
  • 머리 다음 반환
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    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))

    입력

    [2, 4, 8], [3, 4, 8, 10]

    출력

    [4, 8, ]