删除链表的节点,剑指offer 18,力扣

目录

题目地址:

题目:

我们直接看题解吧:

解题方法:

审题目+事例+提示:

解题分析:

解题思路(双指针):

代码实现:

代码实现(直接遍历):

代码实现(单指针):


题目地址:

LCR 136. 删除链表的节点 - 力扣(LeetCode)
难度:简单

今天刷删除链表的节点,大家有兴趣可以点上看看题目要求,试着做一下 。

题目:

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。

返回删除后的链表的头节点。

我们直接看题解吧:

解题方法:

方法1、直接遍历 或者单指针

方法2、双指针(空间复杂度较优)

审题目+事例+提示:

直接返回链表的头指针即可

解题分析:

本题主要分两步:找出节点,修改引用(若找得到)

这里删除链表要分情况:

1找得到要删除的对应节点:

·要删除的节点是头结点head,即要第一个位置的节点

·要删除的节点是中间或者尾节点

2找不到要删除的对应节点

解题思路(双指针):

1、创建并初始化双指针,pre指向head,cur指向head.next

2、循环遍历链表,找出对应的节点,找到或者没找到但遍历完链表则退出

3、若找到了,则修改对应节点的引用

(没找到直接返回头结点)

4、最后返回头结点

代码实现:

复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode deleteNode(ListNode head, int val) {
         //先判断要删除的节点是不是头结点,这个比较特殊
        if(head.val == val) return head.next;   
        //创建双指针,pre,cur分别指向当前节点与下一个节点
        ListNode pre = head, cur = head.next; 
        //循环条件,没找到但遍历完了链表,或者找到对应的节点
        while(cur != null && cur.val != val) {
            pre = cur;
            cur = cur.next;
        }
        //如果是找到对应的节点,则修改引用指向,然后执行下一行代码(即返回头结点)
        if(cur != null) pre.next = cur.next;
       //如果是没找到对应的节点,跳过本行代码,直接执行下一行代码(即返回头结点)
        return head;
    }
}

代码实现(直接遍历):

复制代码
 class Solution {   
   public ListNode deleteNode(ListNode head, int val) {
        ListNode dummy = new ListNode(0, head);
        ListNode temp = dummy;
        while (true){
            if (temp.next.val == val){
                temp.next = temp.next.next;
                break;
            }
            temp = temp.next;
        }
        return dummy.next;
    }
}

代码实现(单指针):

复制代码
class Solution {
    public ListNode deleteNode(ListNode head, int val) {
        if (head == null) return null;
        if (head.val == val) return head.next;
        ListNode cur = head;
        while (cur.next != null && cur.next.val != val)
            cur = cur.next;
        if (cur.next != null)
            cur.next = cur.next.next;
        return head;
    }
}
相关推荐
陈天伟教授4 分钟前
《数据处理和标注技术》课程能力图谱
人工智能·算法
LMT_Lanmantech8 分钟前
HyperWorks许可:almutil显示Unit满了,数据到底准不准?
运维·服务器·算法
禁默18 分钟前
论文解读与思考:基于场所地图的标识感知机器人探索方法及工程参考的价值
人工智能·深度学习·算法·机器人
维克兜率天19 分钟前
【维克】统计套利建模:从因子到信号的完整流程
android·开发语言·python·算法·kotlin
Zentceh25 分钟前
PixelClean 这类 AI 降噪算法是怎么工作的?从 RAW 域到 GAN 色彩重建的技术拆解
图像处理·人工智能·科技·算法·计算机视觉·车载系统·智能硬件
用户03906147071930 分钟前
无感观测器理论模型(NTSM-SMO-PLL 与 SMO-PLL)
算法
垆边人似月.41 分钟前
找出最小的 K 个数
数据结构·c++·算法
熊猫钓鱼>_>1 小时前
当工具成为类:Softmax困境与连接器过载的算法根源
算法·ai·agent·工具·曲线·华为云码道·生态图鉴
信奥卷王1 小时前
[GESP202503 六级] 树上漫步(含视频)
算法
Purple Coder1 小时前
南京-我来啦
算法