Poison

237. Delete Node in a Linked List

Iterate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public void deleteNode(ListNode node) {
ListNode pre = null;
ListNode curr = node;

while (curr.next != null) {
curr.val = curr.next.val;
pre = curr;
curr = curr.next;
}

// now: curr.next is null, curr is tail
pre.next = null;
}
}
Iterate
1
2
3
4
5
6
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}

一般的删除节点操作需要通过修改前驱节点的 next 指针来实现,而本题只提供了待删除节点,所以采用了复制 next 节点值至当前节点并删除 next 节点的方式来实现。开始我写出的解法为将 node 节点后的节点值依次覆盖至前驱节点然后再移除尾节点,但是没有该解法简洁。

Reference

237. Delete Node in a Linked List