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

Python에서 k 값을 기반으로 연결 목록 노드를 정렬하는 프로그램

<시간/>

단일 연결 목록과 다른 값 k가 있다고 가정합니다. k보다 작은 값을 갖는 모든 노드가 먼저 오고, k와 같은 값을 갖는 모든 노드가 다음에 오고, 마지막으로 다른 노드가 마지막에 오도록 노드를 정렬해야 합니다. 제약 조건은 노드의 상대적 순서가 동일하게 유지되어야 한다는 것입니다.

따라서 입력이 L =[4, 3, 6, 6, 6, 10, 8] k =6인 경우 출력은 [4, 3, 6, 6, 6, 10, 8, ]

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

  • less_head :=0과 같은 값으로 연결 리스트 노드 생성
  • less :=less_head
  • equal_head :=0과 같은 값을 가진 연결 리스트 노드 생성
  • 같음:=equal_head
  • greater_head :=0과 같은 값으로 연결 목록 노드 생성
  • 크다 :=더 큼
  • cur :=노드
  • cur가 null이 아닌 동안 do
    • cur
    • next of less :=cur 값과 동일한 값으로 연결 목록 노드 생성
    • less :=다음 중 적은 수
  • 그렇지 않으면 cur의 값이 k> k일 때
    • 다음 중 큰 것:=cur 값과 동일한 값으로 연결 목록 노드 생성
    • 더 큼 :=더 큼
  • 그렇지 않으면
    • next of equal :=cur 값과 동일한 값으로 연결 목록 노드 생성
    • 같음 :=다음 중 같음
  • cur :=cur의 다음
  • 다음 중 적음 :=equal_head 중 다음
  • 다음 중 같음 :=Greater_head 중 다음
  • less_head의 다음 반환
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    예시

    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, k):
       less_head = less = ListNode(0)
       equal_head = equal = ListNode(0)
       greater_head = greater = ListNode(0)
       cur = node
       while cur:
          if cur.val < k:
             less.next = ListNode(cur.val)
             less = less.next
          elif cur.val > k:
             greater.next = ListNode(cur.val)
             greater = greater.next
          else:
             equal.next = ListNode(cur.val)
             equal = equal.next
             cur = cur.next
             less.next = equal_head.next
             equal.next = greater_head.next
          return less_head.next
    ob = Solution()
    L = make_list([4, 3, 6, 6, 6, 10, 8])
    k = 6
    print_list(ob.solve(L, k))

    입력

    [4, 3, 6, 6, 6, 10, 8], 6

    출력

    [4, 3, 6, 6, 6, 10, 8, ]