删除链表的节点,剑指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;
    }
}
相关推荐
Kalika0-042 分钟前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
我是哈哈hh3 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
Tisfy3 小时前
LeetCode 2187.完成旅途的最少时间:二分查找
算法·leetcode·二分查找·题解·二分
Mephisto.java3 小时前
【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180
sql·算法·leetcode
robin_suli3 小时前
滑动窗口->dd爱框框
算法
丶Darling.3 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
labuladuo5203 小时前
Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)
数据结构·c++·算法
Indigo_code4 小时前
【数据结构】【链表代码】合并有序链表
数据结构·windows·链表
jiyisuifeng19914 小时前
代码随想录训练营第54天|单调栈+双指针
数据结构·算法