단일 연결 목록과 다른 값 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
- 그렇지 않으면 cur의 값이 k> k일 때
- 다음 중 큰 것:=cur 값과 동일한 값으로 연결 목록 노드 생성
- 더 큼 :=더 큼
- 그렇지 않으면
- next of equal :=cur 값과 동일한 값으로 연결 목록 노드 생성
- 같음 :=다음 중 같음
- 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, 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, ]