【剑指offer|图解|链表】删除链表的节点 + 训练计划 V

这篇具有很好参考价值的文章主要介绍了【剑指offer|图解|链表】删除链表的节点 + 训练计划 V。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


📋前言

🏠 个人主页:@聆风吟的个人主页
🔥系列专栏:本期文章收录在专栏《剑指offer每日一练》中,大家有兴趣可以浏览和关注,后面将会持续更新更多精彩内容!

⏰寄语:少年有梦不应止于心动,更要付诸行动。
🎉欢迎大家关注🔍点赞👍收藏⭐️评论📝
🌈作者留言:文章创作不易,可能会有些地方出现错误,还希望广大读者们能够帮忙指出,让我们大家一起共同进步。



一. ⛳️删除链表的节点(题目难度:简单)

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

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

示例:

输入: head = [ 4, 5, 1, 9 ], val = 5
输出: [ 4, 1, 9 ]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9

说明:

  • 题目保证链表中节点的值互不相同
  • 若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点

解题思路:
思路: 遍历链表,直到找到某结点 cur->val = val 时跳出循环。设目标结点 cur 的前驱节点为 pre,后继节点为 cur->next;执行 pre->next = cur->next,即可删除 cur 结点。
【剑指offer|图解|链表】删除链表的节点 + 训练计划 V,剑指offer每日一练,链表,数据结构,c++

实现过程:
(1) 首先判断是否删除头结点,如果是直接返回 head->next

(2) 初始化: pre = head,cur = head->next;

(3) 遍历寻找目标结点:cur 为空 cur 结点的值等于 val 时跳出循环。

  • 保存当前结点索引,即pre = cur
  • 遍历下个结点,即cur = cur->next

(4) 删除结点:cur 指向某个结点,则执行 pre->next = cur->next;若 cur 指向 null,则执行代表链表不包含值为val的结点;

(5) 返回链表的头结点 head 即可。

【剑指offer|图解|链表】删除链表的节点 + 训练计划 V,剑指offer每日一练,链表,数据结构,c++

c++代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) {
        //判断是否删除头结点,如果是直接返回 
        if(head->val == val) return head->next;

        //初始化
        ListNode* pre = head;
        ListNode* cur = head->next;

        //遍历寻找目标结点
        while(cur != nullptr && cur->val != val){
            pre = cur;
            cur = cur->next;
        }

        //删除结点
        if(cur != nullptr) pre->next = cur->next;

        //返回头结点
        return head;
    }
};


二. ⛳️训练计划 V(题目难度:简单)

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

题目:
    某教练同时带教两位学员,分别以链表 l1l2 记录了两套核心肌群训练计划,节点值为训练项目编号。两套计划仅有前半部分热身项目不同,后续正式训练项目相同。请设计一个程序找出并返回第一个正式训练项目编号。如果两个链表不存在相交节点,返回 null

示例:
【剑指offer|图解|链表】删除链表的节点 + 训练计划 V,剑指offer每日一练,链表,数据结构,c++

输入: intersectVal = 8, listA = [ 4, 1, 8, 4, 5 ], listB = [ 5, 0, 1, 8, 4, 5 ], skipA = 2, skipB = 3
输出: Reference of the node with value = 8
解释: 第一个正式训练项目编号为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [ 4, 1, 8, 4, 5 ],链表 B 为 [ 5, 0, 1, 8, 4, 5 ]。skipA 表示在 A 中,相交节点前有 2 个节点;skipB 表示在 B 中,相交节点前有 3 个节点。

限制:

  • 如果两个链表没有交点,返回 null.
  • 在返回结果后,两个链表仍须保持原有的结构。
  • 可假定整个链表结构中没有循环。
  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

解题思路:
(1) 初始化: 构建两个指针 node1node2 分别指向两个链表 headAheadB 的头结点
(2) 同时对两个链表进行逐结点遍历:

  • node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点,然后继续遍历;
  • node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点,然后继续遍历;

(2) 当它们相遇时,如果同时指向 nullptr,则没有公共结点;否则指向的结点即为第一个公共结点

【剑指offer|图解|链表】删除链表的节点 + 训练计划 V,剑指offer每日一练,链表,数据结构,c++

【剑指offer|图解|链表】删除链表的节点 + 训练计划 V,剑指offer每日一练,链表,数据结构,c++

c++代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        //初始化
        ListNode* node1 = headA;
        ListNode* node2 = headB;

        //同时对两个链表进行逐结点遍历,判断是否有相遇
        while(node1 != node2)
        {
            //当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点
            node1 = (node1 != nullptr ? node1->next:headB);
            //当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点
            node2 = (node2 != nullptr ? node2->next:headA);
        }

        //返回
        return node1;
    }
};

⛺结尾

    今天的内容就到这里了,你们都学会了吗?如果还有疑问的话请在评论区里多多提问,大家可以一起帮你解决,让我们共同进步。创作不易,如果对你有用的的话点个赞支持下作者,你们的支持是作者创作最大的动力。关注我不迷路,让我们下期再见✋✋。文章来源地址https://www.toymoban.com/news/detail-720788.html

到了这里,关于【剑指offer|图解|链表】删除链表的节点 + 训练计划 V的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第4天-代码随想录刷题训练● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II

    原题链接 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 1.为什么要是用虚拟头结点 2.为什么使用前一个节点a来操作交换后两个节点b和c更好 3.循环终止条件:a的next和a的

    2024年02月04日
    浏览(52)
  • 剑指 offer 链表算法题:链表倒数第k个节点

    题目描述: 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。         例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点

    2024年02月13日
    浏览(35)
  • Leetcode-每日一题【剑指 Offer 35. 复杂链表的复制】

    请实现  copyRandomList  函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个  next  指针指向下一个节点,还有一个  random  指针指向链表中的任意节点或者  null 。 示例 1: 输入: head = [[7,null],[13,0],[11,4],[10,2],[1,0]] 输出: [[7,null],[13,0],[11,4],[10,2],[1,0]] 示例 2: 输入

    2024年02月11日
    浏览(42)
  • 剑指 Offer 22. 链表中倒数第k个节点

    🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸剑指 Offer  🛹Linux 📕 学习格言:博观而约取,厚积而薄发 🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与诸

    2024年02月11日
    浏览(35)
  • 两两交换链表节点+删除链表的倒数第n个节点

    给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: 输入:head = [] 输出:[] 示例 3: 输入:head = [1] 输出:[1] 来源:力扣(

    2024年02月09日
    浏览(37)
  • 【算法入门&链表】【模板】链表|反转链表|合并排序链表|删除链表的节点

    ✅作者简介:热爱后端语言的大学生,CSDN内容合伙人 ✨精品专栏:C++面向对象 🔥系列专栏:算法百炼成神 本专栏收录的均为牛客网的算法题目,内含链表、双指针、递归、动态规划、基本数据结构等算法思想的具体运用。牛客网不仅有大量的经典算法题目,也有大厂的面

    2024年02月17日
    浏览(60)
  • 算法刷题-链表-删除链表的倒数第N个节点

    力扣题目链接 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入:head = [1], n = 1 输出:[] 示例 3: 输入:head = [1,2], n = 1 输出:[1] 双指针的经典应用,

    2024年02月08日
    浏览(44)
  • 数据结构:图文详解双向链表的各种操作(头插法,尾插法,任意位置插入,查询节点,删除节点,求链表的长度... ...)

    目录 一.双向链表的概念 二.双向链表的数据结构 三.双向链表的实现 节点的插入 头插法 尾插法 任意位置插入 节点的删除 删除链表中第一次出现的目标节点 删除链表中所有与相同的节点 节点的查找 链表的清空 链表的长度 四.模拟实现链表的完整代码 前言: 在上一

    2024年02月05日
    浏览(50)
  • 【数据结构和算法】删除链表的中间节点

    Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、复杂度分析 这是力扣的 2095 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。 慢慢开始链表的模块了

    2024年01月19日
    浏览(77)
  • 数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)

    目录  一.什么是链表 二.链表的实现 节点的插入 头插法 尾插法 指定位置插入 节点的删除 删除第一次出现的节点 删除所有节点 节点的查找 链表的清空 链表的长度 前言: 在上一篇文章中,我们认识了线性数据结构中的顺序表,而本篇文章则是介绍线性数据结

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包