Delete Node in a Linked List
Problem
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Supposed the linked list is 1 -> 2 -> 3 -> 4
and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4
after calling your function.
Solution
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}
Analysis
We can only access to the deleted node
Therefore we delete the node by changing the val of it
Because the problem mentions it is not tail, node.next
won't be null so the solution always works
Notice that we cannot just simply write the answer as node = node.next
Because the given node
is just a parameter of method, it does not change the connection in linked list really