此删除法,只给了需要删除的那个节点!
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
示例 1:
输入: head = [4,5,1,9], node = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
示例 2:
输入: head = [4,5,1,9], node = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
解题思路:
因为给定的节点不是尾节点,所以我们可以将,需要删除的节点之后节点的值,依次往前移动一个。然后删除最后一个节点即可.
解题代码:
class Solution {
public void deleteNode(ListNode node) {
if (node == null) {
return;
}
ListNode head = node;
//1、将需要删除的节点后面节点的值,依次赋给前一个节点。
while (head.next.next != null) {
head.val = head.next.val;
head = head.next;
}
//2、将最后一个节点的值赋给倒数第二个节点
head.val = head.next.val;
//3、将最后一个节点删除
head.next = null;
}
}