首页 > 其他分享 >双向链表

双向链表

时间:2023-09-27 10:56:49浏览次数:39  
标签:current 指向 链表 双向 节点 指针

双向链表

双向链表属于链表的一种,也叫双链表双向即是说它的链接方向是双向的,它由若干个节点组成,每个节点都包含下一个节点和上一个节点的指针,所以从双向链表的任意节点开始,都能很方便访问他的前驱结点和后继节点。

 

特点:

  1 创建时无需指定长度。

  2 比起单向,双向需要多一个指向前驱节点的指针,存储空间相对要大一点。

  3 插入跟删除都需要维护nextprev两个指针

 


 

双链表创建

  空链表:   

 

插入链尾:

 数据:the monster is coming

   

 

迭代器:

 迭代器的 current 指针初始指向head

   

 执行两次 next 操作, current 指针指向索引为2的节点

    

 设置 current 指针指向索引为3的节点

 

 

 


链表操作

插入:

 在索引1后面插入“big”节点。先将 current 指针指向索引为1的节点,创建一个"big"新节点

 

 入到 current 指向位置

 

 

删除:

 将“big”节点删除,移动当前指针 current 到“but”节点位置

 

 执行删除操作,断掉“big”节点与前后两节点的 next 和 prev 指针,然后将“the”节点与“monster”节点关联起来

 

 

 


双向循环链表

前面的双向链表的 head 节点和链尾没有连接关系,所以如果要访问最后一个节点的话需要从头开始遍历,直到最后一个节点。在双向链表基础上改进一下,把 header 节点的 prev 指针指向最后一个节点,而最后一个节点的 next 指针指向 header 节点,于是便构成双向循环链表。  
作者:超人汪小建
链接:https://juejin.cn/post/6844903648154271757

 

标签:current,指向,链表,双向,节点,指针
From: https://www.cnblogs.com/fanqianlang/p/17732151.html

相关文章

  • 合并K个排序链表
    合并K个排序链表描述合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出:1->1->2->3->4->4->5->6题解使用heapq,但是ListNode没有比较函数,所以需要自行定义:ListNode.__lt__=lambdax,y:x.val<......
  • Linux的双链表复习—Apple的学习笔记
    一,前言   今天想把linux的双链表base代码拿来单片机用,于是看了下,结果有点混乱了。那么就画了个链表变化图,且做了实验进行巩固。二,分析链表头插方法主要是root然后添加t1,然后添加t2。那么链表的变化是RootRoot->t1Root->t2->t1如下图,R代表root头节点,1代表t1节点,2代表t2节点。......
  • (转)图的存储结构|邻接矩阵、邻接表、十字链表、邻接多重表、边集数组
    原文:https://juejin.cn/post/6996132859001962504?searchId=20230925172238C35D1579B2CBC3D2F78A7.4图的存储结构图的存储结构相较线性表与树来说就更加复杂了。首先,我们口头上说的“顶点的位置”或“邻接点的位置”只是一个相对的概念。其实从图的逻辑结构定义来看,图上任何......
  • leetcode21. 合并两个有序链表
    合并两个有序链表题目链接21.合并两个有序链表将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0......
  • 头歌-01链表及其使用
    第一题#include"linearList.h"node*insertTail(node*h,node*t){//请在此添加代码,补全函数insertTail/**********Begin*********/if(h==NULL){t->next=NULL;returnt;}node*p=h;while(p->next){......
  • 两两交换链表中的节点、删除链表倒数第N个结点、链表相交、环形链表
    题目要求LeetCode24两两交换链表中的节点LeetCode19删除链表的倒数第N个结点LeetCode面试题02.07链表相交LeetCode142环形链表II题目思路24两两交换链表中的节点  本题采用具有虚拟头结点的链表来写,卡哥的示意图如下:  首先要交换的两个链表的前一个结点,然后修改指......
  • 算法打卡|Day4 链表part02
    Day4链表part02今日任务●24.两两交换链表中的节点●19.删除链表的倒数第N个节点●面试题02.07.链表相交●142.环形链表II[TOC]Problem:24.两两交换链表中的节点思路1.迭代法就要注意画图!画图!还是画图!另外迭代的次序不要忘记,链表迭代统一从左往右迭代。用三......
  • 力扣-链表组件
    1.问题给定链表头结点head,该链表上的每个结点都有一个唯一的整型值。同时给定列表G,该列表是上述链表中整型值的一个子集。返回列表G中组件的个数,这里对组件的定义为:链表中一段极长连续结点的值(该值必须在列表G中)构成的集合。极长的含义是:这段连续结点的前面或后面结点不......
  • 算法打卡|Day3 链表part01
    Day3链表part01今日任务●链表理论基础●203.移除链表元素●707.设计链表●206.反转链表[TOC]链表理论基础文章链接:https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html重点:单链表是一种通过指针串联在一起的线性结构,每一......
  • Leetcode刷题21.合并两个有序链表
    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0] 提示:两个链表的节点数目......