删除链表的节点,剑指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;
    }
}
相关推荐
徐小夕1 小时前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
akunkuntaimei1 小时前
2026年高考数学各省真题及答案(完整版)
算法·高考
Hello:CodeWorld2 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法
8Qi83 小时前
LeetCode 516:最长回文子序列
算法·leetcode·职场和发展·动态规划
youngerwang4 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
KaMeidebaby4 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
手写码匠5 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
无限码力6 小时前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试
lqqjuly6 小时前
MLA — 多头潜在注意力深度解析
深度学习·神经网络·算法
吴可可1236 小时前
SolidWorks草图转三维DWG技巧
算法