删除链表的节点,剑指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;
    }
}
相关推荐
yzx99101316 分钟前
基于 Q-Learning 算法和 CNN 的强化学习实现方案
人工智能·算法·cnn
亮亮爱刷题19 分钟前
算法练习-回溯
算法
眼镜哥(with glasses)1 小时前
蓝桥杯 国赛2024python(b组)题目(1-3)
数据结构·算法·蓝桥杯
int型码农6 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT6 小时前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面6 小时前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked936 小时前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
怀旧,6 小时前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
积极向上的向日葵6 小时前
有效的括号题解
数据结构·算法·
GIS小天7 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票