주석을 남겨 문제를 풀이하였음
Class의 성질을 정확히 파악하느냐 못하냐를 구분할 수 있는 문제임
lessTail의 next 값으로 greaterDummy.next를 주는 부분이 핵심
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function partition(head: ListNode | null, x: number): ListNode | null {
// x보다 작은 값이 모일 List
let lessDummy = new ListNode(0)
// x보다 큰 값이 모일 List
let greaterDummy = new ListNode(0)
// Dummy에 값을 채우며 진행될 꼬릿값
let lessTail = lessDummy
let greaterTail = greaterDummy
// 현재 List
let current = head
// head를 순회
while(current) {
// 각 List 조건에 맞게 할
if(current.val < x) {
lessTail.next = current
lessTail = lessTail.next
} else {
greaterTail.next = current
greaterTail = greaterTail.next
}
current = current.next
}
// lessTail의 다음 값으로 greaterTail의 처음 값(greaterDummy.next)을 이어줌
lessTail.next = greaterDummy.next
greaterTail.next = null
return lessDummy.next
};