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

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

题目概述(简单难度)

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


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


例如,传入节点 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:替换删除法这个思路也是非常巧妙的一个思路,可以重点学习下.


相关文章
|
4月前
|
存储 Python
链表中插入节点
链表中插入节点
|
27天前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
39 5
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
30 4
|
2月前
|
安全 云计算
云计算自旋锁问题之在线程安全地删除链表节点时,需要频繁加锁会影响性能如何解决
云计算自旋锁问题之在线程安全地删除链表节点时,需要频繁加锁会影响性能如何解决
36 2
|
3月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
3月前
|
SQL 算法 数据可视化
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
LeetCode题目92:反转链表ll 【python 递归与迭代方法全解析】
|
4月前
|
存储 Python
删除链表节点详解
删除链表节点详解
|
3月前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
4月前
|
存储 Python
链表中删除节点
链表中删除节点