删除中间节点/删除链表中的节点

**题目描述:**实现一种算法,删除单向链表(中间)的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。

示例 :
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {

}
}

注意审题:删除节点的函数。

思路:

将下一个节点的值赋给该节点,然后将该节点的next指向下下个节点

  • a->b->c->d->e->f初始
  • a->b->d->d->e->f 将下一个节点的值赋给该节点
  • a->b->d->e->f 该节点的next指向下下个节点
  • 看上去是删除了该节点 但实际是删除了下一个节点
1
2
3
4
5
6
7
8
9
10
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}
var deleteNode = function(node) {
node.val = node.next.val;
node.next = node.next.next;
};

执行结果:通过

  • 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

  • 内存消耗:39.5 MB, 在所有 Java 提交中击败了19.67%的用户