题目描述
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
现有一个链表 – head = [4,5,1,9],它可以表示为:
示例 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.
说明:
链表至少包含两个节点。
链表中所有节点的值都是唯一的。
给定的节点为非末尾节点并且一定是链表中的一个有效节点。
不要从你的函数中返回任何结果。
思路
踩坑了踩坑了,这跟脑筋急转弯似的,给的直接是要删除的结点,参数里连原链表都没传进来,所以只能是按照偷梁换柱的路子来做。
1.修改前结点的值(偷梁),把当前结点的next结点的值复制过来,即node.value = node.next.val;
2.修改当前结点的后继指针(换柱),让它指向它的后继节点的后继节点,即node.next = node.next.next;
代码(Java)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
ListNode latter = node.next;
node.val = latter.val; // 偷梁
node.next = latter.next; // 换柱
latter.next = null;
}
}
如果正常题目,可能会参数给一个链表,一个指定值,然后我们遍历找到与指定值相等的结点元素值,在此过程中也始终记录前驱结点,这样修改前驱结点的后继指针来删除确定的结点。
本文作者:
whtli
本文链接: https://hexo.whtli.cn/archives/9a53ad75.html
版权声明: 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
本文链接: https://hexo.whtli.cn/archives/9a53ad75.html
版权声明: 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。