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

    双向链表3

    /** * 2.链表转换为字符串 * * */ TwoWayLinkList.prototype.forwardString > this.length) return false } 创建新节点 // 根据data创建新的节点 var newNode = new Node(data) 判断原来链表是否为空 if (this.length == 0) { this.head = newNode this.tail = newNode } 当原来的链表不是空的 也就是进入了 // 根据data创建新的节点 var newNode = new Node(data) // 判断原来的链表是否为空 list.insert(0, 'insert')) console.log(list.insert(4, 'insert1')) console.log(list.insert(3,

    63620编辑于 2023-01-12
  • 来自专栏golang算法架构leetcode技术php

    golang刷leetcode 链表(3)反转链表

    反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 解题思路: 找到起始位置,记录开始旋转之前的位置和之后的位置,旋转中间元素 =nil{ tail.Next=t } return he.Next } 分隔链表 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前 示例: 输入: head = 1->4->3->2->5->2, x = 3 输出: 1->2->2->4->3->5 /** * Definition for singly-linked list

    43120编辑于 2022-08-02
  • 来自专栏学习成长指南

    蓝桥杯---链表3

    1.题目再现重拍链表就是对于这个链表里面的存在的节点元素进行顺序的重新排列:假设我们原来的这个链表里面是存在着5个节点的,这个时候重新排列之后就是1---5---2--4--3这样的顺序,就是从最前面和最后面依次取出来一个元素 ;比如这个链表的中间节点如何去找,这个使用的就是我们的快慢指针的思想,之前是有相关的这个题目的,关于这个链表的逆序,就是去创建一个新的虚拟头节点,把原来的链表里面的节点尾插到我们的这个虚拟头结点的后面不就可以了吗 ;至于这个链表的合并,也是使用的双指针,随着指针的移动,我们不断的让两个链表上面的对应位置的元素组成一个新的链表,这个新的链表就是我们的这个题目需要的最后的结果;下面的这个是处理,我们如何进行逆序,从哪一个位置开始的 ;3.代码分析下面的这个代码是完全按照上面的思路展开的,首先就是把这个链表进行分段,分成两个短的链表,这个分段的原则就是从这个中间节点的位置;刚开始的代码就是双指针找出来中间的节点,然后就是头插法对于右边的这个链表进行逆序 ,cur=next就是变化我们的原来链表里面的cur节点的位置,进行一下更新即可;ret就是合并到的新的链表的这个头结点,原来的两个链表里面的节点就尾插到这个ret的后面即可,因为这个前面的链表是长的,

    15300编辑于 2025-03-09
  • 来自专栏面试经验贴

    3 链表成环

    本文涉及知识点  hash结构 链表 两种数据结构在前面的相关内容都有所提及,如果忘记了,复习完再看效果一定翻倍哟! 1 Leetcode141 环形链表 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。 示例1: 输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。 ? 以[3,2,0,4]为例,p一次走两步,q一次走一步,如下图。 ? 为什么快指针是走两步,慢指针走一步,为啥是两倍?五倍不香? 3 java版本 ?

    59320发布于 2020-06-05
  • 来自专栏惊羽-布壳儿

    算法练习(3) - 链表排序

    package top.buukle.buukle.排序类; public class 排序链表 { //给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 // // 进阶: // // // 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? // // // // // 示例 1: // // //输入:head = [4,2,1,3] //输出:[1,2,3,4] // // // 示例 2: // // //输入:head = [-1,5,3,4,0 ] //输出:[-1,0,3,4,5] // // // 示例 3: // // //输入:head = [] //输出:[] // // // // // 提示: // // // 链表中节点的数目在范围 [0, 5 * 104] 内 // -105 <= Node.val <= 105 // // Related Topics 排序 链表 // 1179 0 //leetcode submit

    37910编辑于 2022-06-15
  • 来自专栏学弱猹的精品小屋

    Leetcode | 第3节:链表

    当然你也可以看出,访问后一个元素之前,必须要先访问前一个,例如这里如果要访问3,就必须先访问1和2,所以查找就会慢了。 关于链表的插入,删除等操作,都是比较标准的数据结构课的内容。 一个好的例子是,如果输入的两个链表分别为7 -> 2 -> 4 -> 3和5 -> 6 -> 4,那么答案应该就是7 -> 8 ->0 -> 7,列个竖式算一下应该就能看出来了。 Problem 3: Leetcode 24 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 用文字来模拟一下,就是 2 -> 4 3 -> 2 1 -> 3 这样就会变成1, 3, 2, 4, 5。 类似的,如果k = 1,那么就是断4 -> 5,那么移动3次就可以了。所以移动的次数其实有一个公式,就是 。这里 是链表的长度。 好的,我们来看看核心代码。

    45120发布于 2021-08-10
  • 来自专栏半生瓜のblog

    LeetCode刷题(3)【链表】【环形链表】&扩展(C语言)

    ---- ---- 环形链表 141. 环形链表 - 力扣(LeetCode) (leetcode-cn.com) 什么是链表带环:链表的最后一个元素不指向空而指向前面的某个结点。 (2)slow一次走1步,fast一次走3不行不行?4不行不行? 答: 不一定可以追上,甚至有可能会进入死循环。我比你快不一定追上,因为存在错过。 若开始追逐,假设二者距离为N,假设slow走1步,fast走3步,距离每次缩减2,N,N-2,N-4,N-6…。

    30710编辑于 2023-05-12
  • 来自专栏Java,后端开发,网站开发,数据结构,算法分析.

    数据结构-3.链表

    现实中的结点一般都是从堆上申请出来的 3. 单向或者双向 2.带头或者不带头 3.循环或者非循环 虽然有8种链表的结构, 但是我们重点掌握两种: 1.无头单向非循环链表: 结构简单, 一般不会单独用来存数据. node3.next = node4; node4.next = node5; this.head = node1; } //遍历单链表 public void clear() { this.head = null; } 3.LinkedList的模拟实现(无头双向链表) 无头双向链表跟上述的单向链表的实现大致相同 LinkedList的底层使用了双向链表 3. LinkedList没有实现RandomAccess接口, 因此LinkedList不支持随机访问 4.

    23310编辑于 2024-11-19
  • 来自专栏王的博客专栏

    链表习题(3)(超详细)

    正文: 1.链表分割 老规矩,小编先给上链接:链表分割_牛客题霸_牛客网 (nowcoder.com) 这个题目给的描述也算是比较直白的,小编概括一下:就是给定一个链表,并且给定一个数,如果链表中的数据小于给定的这个数 首先正如小编之前说的,我们需要让两个链表的长度保持一致,所以小编的建议就是先找到最长的链表,先让这个最长的链表向后走,走的长度就是长的链表减去短的链表的长度,所以为了这么做,我们需要先判断链表的长短,小编的做法就是直接先让第一个链表是长的 ,第二个链表是短的,我们在使用循环来分别计算两个链表的长度以后,我们在判断一下哪一个到底是长链表,如果第一个长,那么就保持不变,反之直接让长链表是第二个,短是第一个就好了,此时我们先让长链表往后走,走完两个链表之差以后 -> next; //long 和 short 都属于关键字,不可以作为变量名 long1 = long1 -> next; } return NULL; } 3. 此时我们让复制好的结点的随机指针指向原链表第二个链表的随机指针的下一个链表,此时我们便可以建立起新链表之间的联系,因为原链表的下一个链表都是新建立的复制原链表链表,所以我们在经过循环操作以后,便可以实现随机指针的指向

    19710编辑于 2024-10-16
  • 来自专栏京程一灯

    JavaScript数据结构(3-2):单向链表与双向链表——双向链表

    第二篇:JavaScript 数据结构(2-1):栈与队列-栈篇 第三篇:JavaScript 数据结构(2-2):栈与队列-队列篇 第四篇:JavaScript数据结构(3-1):单向链表与双向链表— 方法1/3 add(value) DoublyList.prototype.add = function(value) { var node = new Node(value); if 方法2/3 searchNodeAt(position) searchNodeAt(position)的实现与单链表相同。 3 remove(position) 理解这个方法是最具挑战性的。 use-case: there is no second node } else { this.tail = null; } // 3rd

    86320发布于 2019-03-28
  • 来自专栏面试经验贴

    3从尾到头打印链表

    1 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 2 思路 嗯哼,从尾到头顺序返回,可以考虑先进后出,栈! 上菜 链表元素不为空,则入栈,直到遍历完所有元素 遍历栈中元素,不为空则弹出,此时正符合要求。 3 如下图 ? 4 动画演示 5 代码实现 c++版本 ? c++版本 java版本 ?

    55710发布于 2020-07-20
  • 来自专栏京程一灯

    JavaScript数据结构(3-1):单向链表与双向链表——单向链表

    链表的方法 我们需要定义可以从链表中添加、查找和删除节点的方法。先从添加节点开始。 方法1/3: add(value) 太棒了,现在我们来实现将节点添加到链表的功能。 方法2/3: searchNodeAt(position) 现在我们可以将节点添加到链表中了,但是还没有办法找到特定位置的节点。下面添加这个功能。 方法3/3: remove(position) 最后一个方法是remove(position)。 _length--; return deletedNode; } // 3rd use-case: any other node is removed _length--; return deletedNode; }; 请等待本系列的第三篇文章:《JavaScript 数据结构(3):单向链表与双向链表

    95430发布于 2019-03-28
  • 来自专栏技术大杂烩

    【算法题解】 Day3 链表

    其次,将数组从左到右 每 3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块: 2 个数字:单个含 2 个数字的块。 3 个数字:单个含 3 个数字的块。 步骤 2:剩下 3 个数字,将它们放入单个含 3 个数字的块。第 2 个块是 "456" 。 连接这些块后得到 "123-456" 。 步骤 3:剩下 2 个数字,将它们放入单个含 2 个数字的块。第 3 个块是 "78" 。 连接这些块后得到 "123-456-78" 。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [] 示例 1: 输入: head = [1,2,3,4,5] 输出: [5,4,3,2,1] 示例 2: 输入: head = [1,2] 输出: [2,1] 示例 3: 输入: head = [] 输出

    37130编辑于 2023-08-31
  • 来自专栏blog1

    数据结构(3)单链表

    前前后后看了四天左右吧,一方面把单链表过了几遍,另一方面也补全了一些基础,诸如 &引用,结构体指针,封装 等等内容,感觉难点不是代码怎么敲,而是要想明白每个操作的逻辑以及一些容易忽略的边界条件,为什么要有这些边界条件 单链表 建表 typedef struct LNode{ int data;//数据域 struct LNode *next;//指向下一个结点的指针域 }LNode,*LinkList = NULL){ return ERROR; } LNode *s = p->next;//4 p->data = s->data;//p不能是最后一个结点//3变为 3 5 4 1 InsertPrior(L->next->next,6);//在第2位前面插入6 3 6 5 4 1 Deletespecial(L->next->next->next //删除第四个结点 InsertNext(L,9); Print(L); GetElem(L,2,&e); LocateElem(L,5); } 运行:初始插入1,2,3

    48520编辑于 2022-12-26
  • 来自专栏学习

    【数据结构】链表专题3

    前言 本篇博客我们继续来讨论链表专题,今天的链表算法题是经典中的经典 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见 欢迎大家点赞收藏⭐文章 1.判断链表是否有环 N-2 N-4 N-4 …… …… 4 3 这里我们就需要用到数学列等式的思维来判断两个条件是否可以同时存在 我们假设进环之前的距离是L 那么slow刚进环时,slow走过的距离是L,此刻我们假设fast走了x圈,那fast走过的距离就是L+x*C+C-N fast的距离是slow的三倍 那么就有了等式 3L 3.随机链表的复制 这道题链表每个节点里多了个指针指向随机节点,也有可能指向空,然后我们要深拷贝一份(深拷贝意思就是把指针指向对应的值对应关系也要在新拷贝的链表中实现),有人说我直接遍历然后拷贝不就行了 ,并返回新链表的头结点 代码如下 这道题整体代码如下 相当于三个while嘛,一个while循环一步 结束语 链表有关算法题也就总结完了,从链表专题1到3都是特别经典的算法题,我们一定要反复练习掌握

    24110编辑于 2024-09-25
  • 来自专栏Linux学习~

    《手撕链表题系列-3》找到链表的中间结点

    前言 本系列主要讲解链表的经典题 注:划重点!!必考~ 找到链表的中间结点 力扣链接:876. 链表的中间结点 - 力扣(LeetCode) (leetcode-cn.com) 题目描述: 给定一个头结点为 head 的非空单链表,返回链表的中间结点 如果有两个中间结点,则返回第二个中间结点 示例: 提示: 给定链表的结点数介于 1 和 100 之间 解题思路: 一般的思路: 一个个遍历,得到链表长度,在遍历链表长度的二分之一,就能得到中间结点 高效思路: 使用两个指针 一个慢指针每次走一个结点的位置 一个快指针每次走慢指针的两倍长度 当快指针走完链表时,而慢指针则恰在链表中间结点位置 注意:链表长度有奇数和偶数两种情况 注:这里我们来实现高效思路 图示:  参考代码: /** * Definition

    37720编辑于 2022-11-30
  • 来自专栏cs阿伟

    【C语言入门数据结构3链表之单链表

    带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。 ---- 1.3简单实现链表链接: 定义结点 : 测试部分: BuySLTNode 开辟空间函数封装: 由于上面创建结点,n1,n2,n3,n4需要一个一个创建,比较复杂,故我们封装一个函数,使得可以创建 ---- 2、单链表(single linked list)程序: 经过上面简单的单链表链接,想必你已经对单链表有了些许认识,下面让我们来实现单链表吧!! ); return 0; } 调用TestSList2时: 调用TestSList3时: 此时,我们插入的数据并没有插进去,所以要考虑到链表为空的情况。 = BuySLTNode(3); SLTNode* n4 = BuySLTNode(4); n1->next = n2; n2->next = n3; n3->next = n4; n4->next

    52820编辑于 2023-10-10
  • 来自专栏刷题笔记

    2-3 链表拼接 (20 分)

    本文链接:https://blog.csdn.net/shiliang97/article/details/101050371 2-3 链表拼接 (20 分) 本题要求实现一个合并两个有序链表的简单函数 (struct ListNode *list1, struct ListNode *list2); 其中list1和list2是用户传入的两个按data升序链接的链表的头指针;函数mergelists将两个链表合并成一个按 data升序链接的链表,并返回结果链表的头指针。 list1 = mergelists(list1, list2); printlist(list1); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 1 3 5 7 -1 2 4 6 -1 输出样例: 1 2 3 4 5 6 7 这个有点套路了,这些题 struct ListNode *mergelists(struct ListNode *list1,

    71640发布于 2019-11-08
  • 来自专栏绝活编程学习

    链表相关面试题--3.链表的中间节点

    3.链表的中间节点 876. 链表的中间结点 - 力扣(LeetCode) /* 解题思路: 通过快慢指针找到中间节点,快指针每次走两步,慢指针每次走一步,当快指针走到结尾的时候,慢指针正好走到中间位置 */ typedef

    19200编辑于 2024-12-16
  • 来自专栏前端迷

    数据结构与前端开发(3)-链表

    概念 链表是一个线性结构,同时也是一个天然的递归结构。链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。 实现 单向链表 class Node { constructor(v, next) { this.value = v this.next = next } } class LinkList { constructor() { // 链表长度 this.size = 0 // 虚拟头部 this.dummyNode = new Node(null, null header.next, index, currentIndex + 1) } addNode(v, index) { this.checkIndex(index) // 当往链表末尾插入时

    64541发布于 2018-10-22
领券