删除链表的节点,剑指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;
    }
}
相关推荐
九年义务漏网鲨鱼35 分钟前
【多模态大模型面经】现代大模型架构(一): 组注意力机制(GQA)和 RMSNorm
人工智能·深度学习·算法·架构·大模型·强化学习
闲人编程42 分钟前
CPython与PyPy性能对比:不同解释器的优劣分析
python·算法·编译器·jit·cpython·codecapsule
杜子不疼.1 小时前
【C++】深入解析AVL树:平衡搜索树的核心概念与实现
android·c++·算法
小武~1 小时前
Leetcode 每日一题C 语言版 -- 88 merge sorted array
c语言·算法·leetcode
e***U8201 小时前
算法设计模式
算法·设计模式
徐子童2 小时前
数据结构----排序算法
java·数据结构·算法·排序算法·面试题
hansang_IR2 小时前
【记录】四道双指针
c++·算法·贪心·双指针
_OP_CHEN2 小时前
算法基础篇:(十二)基础算法之倍增思想:从快速幂到大数据运算优化
大数据·c++·算法·acm·算法竞赛·倍增思想
CoovallyAIHub2 小时前
分割万事万物的AI,再进化!Meta SAM 3 来了,支持中文提示词!
深度学习·算法·计算机视觉
九年义务漏网鲨鱼2 小时前
蓝桥杯算法——记忆化搜索
算法·职场和发展·蓝桥杯