首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏前端小菜鸡yym

    双向链表4

    编码 首先是越界判断,小于零或者大于等于链表长度返回false 定义变量,current和index。current指向head,index从0开始。 list.append('ghg') console.log(list.insert(0, 'insert')) console.log(list.insert(4, 对于单向链表只能从头开始找。但是双向链表可以根据就近原则,选择从前往后找,还是从后往前找。

    61620编辑于 2023-01-12
  • 来自专栏blog1

    数据结构(4)双链表,循环链表,静态链表

    链表链表和单链表的区别就是,一个结点除了有指向后一个结点的指针域,还有一个指向前一个结点的指针域,所以建表的代码为: typedef struct DNode{ int data; 和单链表不同的操作在于插入和删除,不同点是双链表的插入和删除需要同时修改两个方向的指针。 循环链表 循环单链表 表尾指向头结点 循环双链表 在什么的双链表的插入和删除操作中,如果p是最后一个结点,那么p->next就是NULL ,但是使用循环链表的话就不会出现那种情况。 静态链表 链表的每个结点在内存中的分布是随机的,静态链表就是建立一个固定的区间,结点在这固定的区间内随机存储。 计划从明天开始栈和队列,静态链表这里先大概了解原理,具体实现之后再补。‍️

    68240编辑于 2022-12-26
  • 来自专栏面试经验贴

    4 合并有序链表

    本文涉及知识点  哨兵结点的运用 链表数据结构中哨兵的作用在之前详细阐述了[leetcode链表系列]2 删除链表中的节点,忘记了的小伙伴复习后再看效果一定翻倍哟! 1 Leetcode21 合并有序链表 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 小蓝希望大家在此思考1分钟, 效果更好哈! 01 题目解析 思路 为了方便返回合并后的链表,我们使用head为头结点,p1,p2分别跟踪两链表L1,L2.如下图。 ? 如果p1当前值小于p2的值,我们就将p1的值直接连接在pre后面并移动p1。 循环结束的时候,如果有一个链表非空,因为两链表均有序,将其合并到另个链表即可。 今天小蓝没有把具体完整的画出来,想着做了一个带bgm的动画,大家可以放松放松的看看。

    58920发布于 2020-06-05
  • 来自专栏golang算法架构leetcode技术php

    golang刷leetcode 链表(4)复制带随机指针的链表

    给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的深拷贝。 解题技巧: 1,因为random指针的存在,所以copy的时候如何定位random是个问题,所以简单方法在原链表每个位置后面插入一个元素。

    48230编辑于 2022-08-02
  • 来自专栏技术大杂烩

    【算法题解】 Day4 链表

    链表的中间结点 题目 876. 链表的中间结点 难度:easy 给定一个头结点为 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4,5]) 返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。 注意,我们返回了一个 ListNode 类型的对象 ans,这样: ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next 示例 2: 输入:[1,2,3,4,5,6] 输出:此列表中的结点 4 (序列化形式:[4,5,6]) 由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。 示例 1: 输入: head = [3,2,0,-4], pos = 1 输出: 返回索引为 1 的链表节点 解释: 链表中有一个环,其尾部连接到第二个节点。

    31620编辑于 2023-08-31
  • 来自专栏一条IT

    【每日leetcode】4.合并有序链表

    Question 难度:简单 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = 异曲同工 忘记的小伙伴可以先看一下 传送门 当l1 和l2 都不是空链表时,判断l1 和l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里。 当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。 将非空链表接在合并链表的后面 对于链表操作,一般都需要维护一个当前节点的指针,可以再点击阅读原文回看一下两数相加帮助理解 Code 所有leetcode代码已同步至github https://github.com

    50030发布于 2021-08-12
  • 来自专栏趣学算法

    数据结构 第4讲 单链表

    数据结构 第4讲 单链表 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那么怎么表示逻辑上的相邻关系呢?可以给每个元素附加一个指针域,指向下一个元素的存储位置。 拉直链表之后: ? 继续依次输入数据元素3,4,5,6,7,8,9,10,前插法创建链表的结果: ? 继续依次输入数据元素3,4,5,6,7,8,9,10,前插法创建链表的结果: ? 创建单链表(前插法)\n";     cout << "3. 创建单链表(尾插法)\n";     cout << "4. 取值\n";     cout << "5. :\n"; Listprint_L(L);             break;         case 4: //单链表的按序号取值             cout << "请输入一个位置i用来取值

    86230发布于 2018-09-13
  • 来自专栏Linux学习~

    《手撕链表题系列-4链表中倒数第k个结点

    前言 本系列主要讲解链表的经典题 注:划重点!! 必考~ 找到链表的中间结点 牛客链接:链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com) 题目描述: 输入一个链表,输出该链表中倒数第k个结点 示例: 解题思路: 一般思路: 遍历链表两次 高效思路: 使用两个指针 快指针先走k步 慢指针再与快指针一起走 当快指针走完时,慢指针走到倒数第k个结点 注意:k的大小可能超过链表长度这一特殊情况 注:这里我们来实现高效思路 * @return ListNode类 */ struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) { //链表不为

    27920编辑于 2022-11-30
  • 来自专栏全栈学习之路

    码不停题:LeetCode 75-Day4链表

    链表的中间结点 ❓题目描述 给定一个头结点为 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 题目示例 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4,5]) 返回的结点值为 3 。(测评系统对该结点序列化表述是 [3,4,5])。 注意,我们返回了一个 ListNode 类型的对象 ans,这样: ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next 示例 2: 输入:[1,2,3,4,5,6] 输出:此列表中的结点 4 (序列化形式:[4,5,6]) 由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。 题目示例 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接到第二个节点。

    24920编辑于 2023-07-12
  • 来自专栏Deep learning进阶路

    2-4 线性表之双链表

    2-4 线性表之双链表 双向链表除了相当于在单链表的基础上,每个结点多了一个指针域prior,用于存储其直接前驱的地址。同时保留有next,用于存储其直接后继的地址。 ? 所以对于带头结点的双链表,其实很多操作都和 带头结点的单链表是一样的,因为你完全可以忽视掉它有个 prior指针,这样就可以当做单链表来使用。 所以,这里只写一下定义和初始化的过程,其他的操作基本可以参照带头结点的单链表。 DUL_LINKLIST_H_ 4.函数定义文件 #include<iostream> #include"dul_link_list.h" using std::cin; using std::cout ,但是要注意一点: 我那个程序是针对没有被初始化过的链表指针,因为那个函数里面有初始化语句, 所以如果你输入一个已经被初始化过的链表,哪怕是空链表,的头指针,也会有个问题存在, 那就是头指针的值被更新为

    58120发布于 2019-07-02
  • 来自专栏算法其实很好玩

    Day4-线性表-排序链表去重

    一 老规矩 昨天口误了,链表之后,还有线性表的队列和栈,并不是字符串,惊不惊喜意不意外 ? 然后今天是最后一篇初级链表,然后,今天只有一篇,但是有两个问题,惊不惊喜意不意外 ? ? 二 题目 Q:给定排序的链表,删除重复元素,只保留重复元素第一次出现的节点 那么对于以下这个链表 2→3→3→5→7→8→8→8→9→9→10 则返回 2→3→5→7→8→9→10 三 分析 排序链表,意味着,重复元素都是相邻的,即你前面删完的重复元素,后面不会出现~ 这第一种情况比较好理解,用两个指针,pre和cur,cur指向当前节点,pre指向前驱节点。 六 总结 初级链表问题就到这啦~然后从明天开始,对线性表-队列,栈的算法题进行共同探讨嘛~ ? ?

    1.1K20发布于 2019-07-16
  • 来自专栏趣学算法

    数据结构 第4-2讲 双向链表

    数据结构第4-2讲双向链表 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那么怎么表示逻辑上的相邻关系呢? 可以给每个元素附加一个指针域,指向下一个元素的存储位置。 (4) 输入数据元素2,创建新结点,把元素2放入新结点数据域: ? (5) 前插操作,插入到头结点的后面: ? 解释: ? 注意:赋值语句的右侧是一个地址,左侧是一个结点的指针域。 拉直链表之后: ? (6) 继续依次输入数据元素3,4,5,前插法创建链表的结果: ?   双向链表取值、查找如同单向链表,不再赘述。 4. 双向链表插入 单链表只有一个指针域,是向后操作的,不可以向前处理,因此单链表如果要在第i个结点之前插入一个元素,则必须先找到第i-1个结点。 创建双向链表(前插法)\n"; cout << "3. 取值\n"; cout << "4. 查找\n"; cout << "5. 插入\n"; cout << "6.

    90940发布于 2018-09-13
  • 来自专栏JavaEdge

    图解MySQL系列(4)-Buffer Pool中的free链表

    所以数据库会为BP设计个free链表,双向链表,每个节点就是个空闲缓存页的描述数据块的地址,即只要一个缓存页空闲,那他的描述数据块就会被放入free链表。 上图中,这free链表里就是各个缓存页的描述信息块,只要缓存页空闲,对应的描述信息块就会加入free链表,每个节点都会双向链接自己的前后节点,组成一个双向链表。 free链表有个基础节点引用链表的头节点和尾节点,存储了链表中有多少个描述数据块的节点,即有多少个空闲缓存页。 free链表占用内存大小 这free链表本就由BP里的描述信息块组成,可认为是每个描述信息块里都有两个指针: free_pre 指向自己的上一个free链表的节点 free_next 指向下一个 对free链表,只有一个**基础节点(40K)**不属于BP,存放了free链表的头节点地址,尾节点地址,还有free链表当前节点个数。 如何将磁盘上的页读取到BP的缓存页?

    66020编辑于 2022-02-05
  • 来自专栏小小程序员——DATA

    备战蓝桥杯—— 双指针技巧巧答链表4

    链表的分解: 使用快慢指针技巧,快指针每次移动两步,慢指针每次移动一步,直到快指针到达链表尾部。这样可以找到链表的中间节点,从而将链表分解成两部分。 合并 k 个有序链表: 可以利用归并排序的思想,两两合并链表,直到合并成一个链表。 示例 1: 输入:head = [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为 3 。 示例 2: 输入:head = [1,2,3,4,5,6] 输出:[4,5,6] 解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。 示例 1: 输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5] 示例 2: 输入:head = [2,1], x = 2 输出:[1,2] 提示: 链表中节点的数目在范围

    36410编辑于 2024-02-24
  • 来自专栏绝活编程学习

    链表相关面试题--4.链表中倒数第k个结点

    4.链表中倒数第k个结点 链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com) /* 解题思路: 快慢指针法 fast, slow, 首先让fast先走k步,然后fast,slow

    20410编辑于 2024-12-16
  • 来自专栏c/c++

    数据结构——lesson4带头双向循环链表实现

    一、什么是带头双向循环链表? 带头双向循环链表(Doubly Circular Linked List with a Head)是一种链表数据结构,它具有以下特点: 1.头节点:带头双向循环链表包含一个头节点,它位于链表的起始位置 总结:带头双向循环链表可以支持在链表的任意位置进行插入和删除操作,并且可以实现正向和反向的循环遍历。通过循环连接的特性,链表可以在连续的循环中遍历所有节点,使得链表的操作更加灵活和高效。 二、带头双向循环链表的实现 1 .搭建链表基础 带头双向循环链表需要三个变量,两个存放指向前后节点的指针,另一个存放数据 // 带头+双向+循环链表增删查改实现 typedef int LTDataType ListNode* head = BuyNode(-1);//这里将头节点数据设为-1,任意数都可以 head->next = head; head->prev = head; return head; } 4.

    44410编辑于 2024-03-13
  • 来自专栏同步文章1234

    【剑指offer|4.从尾到头打印单链表

    0.从尾到头打印单链表链表:一般给的都是无头节点的 另外:在面试中,如果我们打算修改输入的数据,则最好问一下面试官是不是允许修改 下面这种先把链表节点的值按链表序放到数组中,然后来一个算法库中的 cur->next; } v.reverse(v.begin(),v.end());//先放到数组,然后逆置 return v; } }; 1.修改链表的方法 NULL) {} * }; */ class Solution { public: vector<int> reversePrint(ListNode* head) { //链表逆置 -栈 /** * Definition for singly-linked list.单链表:一般给的都是无头节点的 * struct ListNode { * int val; * v.push_back(cur->val); st.pop(); } return v; } }; 3.不修改链表的方法

    36740编辑于 2023-04-09
  • 来自专栏web编程技术分享

    Java小白翻身教程-链表结构与编译大法(4

    image 步骤 4 新的运行方式 来到classes文件夹,我们需要改变一下运行方式,多一个步骤,添加jar包的路径,注意jar包的路径需要以 **; **结尾。 ?

    43140发布于 2021-07-19
  • 来自专栏Java小白成长之路

    剑指offer第4题:从头到尾打印链表

    从尾到头打印链表 剑指Offer 06:从尾到头打印链表 ? 题目描述 解法一:反转链表 题目要求我们从尾到头打印数组,首先应该想到我们肯定是需要对整个链表进行一个反序操作。 所以联想到我们之前做过的反转链表题目,这道就解出来了。 我们可以借鉴反转链表的解题,然后将反转之后的链表再次遍历,然后将其存储到对应的数组中即可。 public int[] reversePrint(ListNode head) { ListNode pre = null; int size = 0;//记录链表长度 = null){//反转链表 ListNode temp = head.next; head.next = pre; pre = 所以我们可以在第一次遍历整个链表的时候,将链表中的每个元素直接push到stack中,然后再重新将所有栈中所有元素pop出来,即可完成整个链表的反序输出。

    56110发布于 2020-07-15
  • 来自专栏冷月带你手撕代码

    冷月手撕408之数据结构(4)-链表

    链表是最基础,也是必须要掌握的啊。” 链表是线性表中的重点,必须熟练掌握。首先要知道链表中的术语,然后要知道各种链表的结构,以及插入删除方法。 冷月点睛 链表 定义 逻辑上相邻,物理上不一定相邻的线性表。除了第一个元素,其他元素有且只有一个直接前驱;除了最后一个元素,其他元素有且只有一个直接后继。 基础术语 首节点 有效元素的第一个节点 尾节点 有效元素的最后一个节点 头结点 有效元素的第一个节点前面的节点 头指针 指向头结点的指针 尾指针 指向尾节点的指针 分类 单链表 一个节点内分为数据域和指针域 双链表 有两个指针域。一个指向前驱,一个指向后继 ? 循环链表 最后一个节点的指针域指向第一个节点 ? 静态链表 利用一个二维数组,指针域就是数组的下标 ?

    42510发布于 2021-02-22
领券