请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
现有一个链表 – head = [4,5,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;
}
}
解题思路:一般删除一个节点,是略过当前要删除的节点,是指向当前删除节点的指针指向后一个指针,如下图所示:
但是注意审题,本题中我们只知道被删除的节点是5,但并不知道它前面的节点是谁。
所以我们首先需要将节点5的后一个节点的值,保存在节点5中。
这样我们就可以放心删除了,无论是删除节点5还是删除节点5后面的节点,所得到的结果都是正确的。