题目: 237. Delete Node in a Linked List (删除链表中的节点)
连接: 237. Delete Node in a Linked List
Write a function to delete a node in a singly-linked list. You will not be given access to the head of the list, instead you will be given access to the node to be deleted directly.
It is guaranteed that the node to be deleted is not a tail node in the list.
请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。
题目数据保证需要删除的节点 不是末尾节点 。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;//节点值
* ListNode next;//获取下一个节点
* ListNode(int x) { val = x; }//有参构造函数
* }
*/
class Solution {
public void deleteNode(ListNode node) {
}
}
思路分析
在链表 [4, 5, 1, 9]
中,当我们要删除节点 5
时,我们会修改节点 5
上一个节点 4
的指针,让它指向节点 5
的下一个节点,即节点 1
:
因为要删除给定的节点,而我们还不清楚这个节点的前一个节点,我们只能确定这个节点的下一个节点,想要删除这个节点,我们就需要找到可以知道上一个节点的节点,把它变成要删除的节点,然后删除它。
例如,还是链表 [4, 5, 1, 9]
链表,还是删除节点 5
。
首先我们先把节点 5
的下一个节点赋值给它,把它变成一个不需要删除的节点。
这样来看,我们无论删除第二个节点还是删除第三节点,得到的链表都是 [4, 1, 9]
。既然第二个节点不好删除,那么我们就删除第三个节点。
将第二个节点的指针指向第四个节点,这样我们就删除第三个节点了。如下:
具体实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;//节点值
* ListNode next;//获取下一个节点
* ListNode(int x) { val = x; }//有参构造函数
* }
*/
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}