[Leetcode] #237 Singly Linked List 노드 지우기

문제 요약

자세한 내용은 leetcode에서 확인

https://leetcode.com/problems/delete-node-in-a-linked-list/


next 포인터만을 가진 Singly Linked List (단방향)가 있다. 

1 -> 3 -> 5 -> 7 -> 9 -> null


주어진 노드만으로 해당 노드를 리스트에서 삭제해라.


Node 클래스는 다음과 같다


public class ListNode {
int val;
ListNode next;
}


풀이

Doubly Linked List (양방향)의 경우엔 쉬운 문제다. prev와 next 노드를 연결시켜주면 끝이다.



    public class ListNode {
int val;
ListNode prev;
ListNode next;
}

public void deleteNode(ListNode node) {
node.prev.next = node.next;
node.next.prev = node.prev;
node.prev = null;
node.next = null;
}



하지만 단방향의 경우엔 prev 포인터가 없다. 때문에 next 노드를 현재 노드에 덮어 씌워 버리면 된다.

    // 문제 전제 조건: tail 노드는 해당 메소드를 사용 할 수 없다
public void deleteNode(ListNode node) {
if (node == null) return;
node.val = node.next.val;
node.next = node.next.next;
}