React

14 두 정렬 리스트의 병합

정렬되어 있는 두 연결 리스트를 합쳐라

My solution

두 연결 리스트를 병합했을 때도 정렬된 상태여야 한다.
문제에 자세한 기준이 안 나와있어서 알아서 판단해야 한다.
const mergeTwoSortedLists = function (l1, l2) { const result = new LinkedList(); while (l1 && l2) { if (l1.val <= l2.val) { result.append(l1.val); l1 = l1.next; } else { result.append(l2.val); l2 = l2.next; } if (!l1 && l2) { while (l2) { result.append(l2.val); l2 = l2.next; } } if (!l2 && l1) { while (l1) { result.append(l1.val); l1 = l1.next; } } } return result.head; };
JavaScript
복사
이렇게 짰는데 leetcode에 제출하려면 LinkedList()와 append()를 추가해주어야 한다.
function LinkedList() { this.head = null; this.length = 0; } LinkedList.prototype.append = function (value) { const node = new ListNode(value); let current = this.head; if (this.head === null) { this.head = node; } else { while (current.next != null) { current = current.next; } current.next = node; } this.length++; };
JavaScript
복사
테스트케이스 fail이 있다.
while문 내에서 l1이나 l2 둘중 하나가 먼저 null을 만나면 마무리 처리를 while문 안에 추가하려고 했는데 runtime error가 나와서 while문 밑에서 result의 현재노드의 뒤에 남은 리스트는 이어붙여줬

Code

const mergeTwoSortedLists = function (l1, l2) { const resultNode = new ListNode(0, null); let currentNode = resultNode; while (l1 && l2) { if (l1.val < l2.val) { currentNode.next = l1; l1 = l1.next; } else { currentNode.next = l2; l2 = l2.next; } currentNode = currentNode.next; } currentNode.next = l1 || l2; return resultNode.next; };
JavaScript
복사

Solution

1. 재귀 구조로 연결