Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.
Example 1:
Input: head = [1,1,2]
Output: [1,2]
Example 2:
Input: head = [1,1,2,3,3]
Output: [1,2,3]
이 문제를 풀다가 만난 node를 처음 접하게 되었다.

위 그림처럼 노드가 연결되어 있고, 순서대로 포인터가 연결되어 있다. 당연히 마지막 노드의 node.next를 찾게되면 null로 나오게 된다.
처음에는 node를 전혀 이해하지 못하고 '배열처럼 생겼네?'라는 가벼운 생각으로 for문을 사용해 루프를 돌렸다. 그러나
Line 13: Char 51: error TS2355: A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value.
Line 15: Char 25: error TS2339: Property 'length' does not exist on type 'ListNode'.
띠로리 -
에러를 만났다.
위의 에러 뿐만 아니라
type 'listnode' must have a '[symbol.iterator]()' method
라는 처음 보는 에러도 만났다. (반가워..)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_generators
이건 iterator 매서드가 있어야 루프를 사용할 수 있는데 냅다 for문을 돌리고 index에 접근해서 발생한 것 같다.

(똑똑하군)
암턴간에 결국 while문을 사용하고 node마다 val를 확인해서 비교하고, 현재 node의 val가 다음 node의 val와 같다면, 다음 node를 다다음node로 바꾸는 식으로 해결했다.
(그게 아니면, 그냥 다음 node로 넘어감)
function deleteDuplicates(head: ListNode | null): ListNode | null {
let node = head;
while(node !== null){
if(node.next !== null){
if(node.val === node.next.val){
node.next = node.next.next;
continue
}
}
node = node.next
}
return node;
};
근데 마지막에 node를 리턴해주니까 제대로된 값이 나오지 않았다.
head를 리턴해야 중복된 값이 삭제된 linknode가 반환되었다.
이유를 잘 모르겠다.. 알게되면 이어서 작성해야지..
3.24 추가)
node의 value를 비교하여 포인터를 변경해준다. 리스트 자체를 변경하는 것이 아니고 node를 순회하며 포인터를 변경하기때문에 모든 노드를 순회하고 난 뒤에 head를 리턴해야 변경된 포인터대로 값이 리턴된다.
0 1 2 3 4 5 6 => nodelist
0 1 1 2 2 3 3
0 => 1 => 3 => 5
head => 0
Node null
0 -> 1 -> 2 -> 3 ….
-> = next
0 = head
value
0 => 1 => 2 => 3
Node node node node