237. Delete Node in a Linked List

题目

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.

分析

  • 单链表
  • 删除指定节点
  • 不会删除尾节点

这个题目的难点在于:删除某个节点我们需要知道前驱节点,而题目只给出需要删除的节点。
我们可以把每个节点的值往前移动一位,删除尾节点即可。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* 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) {
if(node == null){
return;
}
while(node.next.next != null){
node.val = node.next.val;
node = node.next;
}
node.val = node.next.val;
node.next = null;
}
}