문제 요약
자세한 내용은 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;
}