删除链表中间节点(变形题目,简单难度)

简介: 删除链表中间节点(变形题目,简单难度)

题目概述(简单难度)

若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。


假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。


例如,传入节点 c(位于单向链表 a->b->c->d->e->f 中),将其删除后,剩余链表为 a->b->d->e->f


在此附上leetcode链接:

点击此处进入leetcode


思路与代码

思路展现

这道题目跟之前有所不同的是,这道题目并没有给我们头节点,只是给了一个要删除的"中间节点“。

所以针对这道题目的做法:我们不能再像之前那样遍历链表,而是用一种全新的思维:替换删除法

先来看一个实例:

2.png

假设此时我们要删除的节点是值域为78这个节点,node指针此时指向这个节点,我们的思路是这样的:

1:既然要删除值域为78的节点,相当于删除后的链表是这样子的

2.png

既然这样,我们就可以用替换删除法,将要删除的节点的值域变成即将要被删除的节点的下一个节点的值域,即node.val=node.next.val,这样78变成了15,但是next域也需要变化.

2:当然变换值域还不够,还要将node指针所指向的要删除的节点的next域变成node指针所指向节点的下一个节点的next域的值,即node.next=node.next.next,这样我们就完成了偷梁换柱.

3:当然我们写代码时候有的同学会纠结node是链表头节点和尾节点的情况,大家大可不用担心,因为node在题目中设置的就是除了这两个节点以外的情况.


代码示例

class Solution {
    public void deleteNode(ListNode node) {
            //如果没有这个中间节点,方法直接结束
            if(node==null){
                return;
            }
            node.val=node.next.val;
            node.next=node.next.next;
    }
}

总结

1:此算法:

时间复杂度:O(1)

2:替换删除法这个思路也是非常巧妙的一个思路,可以重点学习下.


相关文章
|
1月前
|
存储
链表题目练习及讲解(下)
链表题目练习及讲解(下)
25 9
|
1月前
链表题目练习及讲解(上)
链表题目练习及讲解(上)
23 1
|
1月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
18 0
LeetCode第二十四题(两两交换链表中的节点)
|
1月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
43 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
1月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
49 0
|
3月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
05_删除链表的倒数第N个节点
05_删除链表的倒数第N个节点
04_两两交换链表中的节点
04_两两交换链表中的节点
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
54 5
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
41 4