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

双向链表

时间:2022-11-17 00:55:55浏览次数:37  
标签:Node 结点 指向 链表 jack 双向 bob

双向链表示意图

image

双向列表由三部分组成
链表头(由结点担任,它的前一个结点是null)
结点
链表尾(由结点担任,它的后一个结点是null)

结点之间按照线性顺序,指向前一个结点,指向后一个结点。 就构成了链表
比如 饺子的下一个结点是汤圆
那么汤圆的上一个结点就必须是饺子,这样他两前和后才都有关联。

每一个结点由三个参数构成

  1. 数据
  2. 上一个结点坐标
  3. 下一个结点坐标

定义一个Node_结点类

class Node_{
    public Object item; // 存放数据
    public Node_ next; //指向后一个节点
    public Node_ pre; // 指向前一个节点

    public Node_(Object item) {
        this.item = item;
    }

    @Override
    public String toString() {
        return "item = " + item ;
    }
}

组成链表

	Node_ tom = new Node_("tom");
        Node_ jack = new Node_("jack");
        Node_ bob = new Node_("bob");
        
            // 连接三个结点,形成双向链表
            // ton -> jack -> bob
            tom.next = jack;
            jack.next = bob;
            
            // bob -> jack -> tom
            bob.pre = jack;
            jack.pre = tom;
        
        // 让first 指向tom,表示作为链表头结点    
        Node_ first = tom;
        // 让last 指向bob,表示作为列表尾结点
        Node_ last = bob;

从头到尾遍历

while (first != null){
     System.out.println(first);
     first = first.next;
}

从尾到头遍历

while (last != null){
     System.out.println(last);
     last = last.pre;
}

往链表里插入数据

就是修改结点之间的两个指向,
image

例子,往A,B,中间插入一个C

只需要断开A的下一个结点指向,B的上一个结点指向即可

让A的下一个结点直接指向C,C的下一个结点指向B(图中未画出),C的上一个结点直接指向A。B的上一个结点指向C(图中未画出) 即可

image

// 插入数据
        Node_ mask = new Node_("mask");
        mask.next = bob;
        mask.pre = jack;
        jack.next = mask;
        bob.pre = mask;

标签:Node,结点,指向,链表,jack,双向,bob
From: https://www.cnblogs.com/24cuo/p/16898108.html

相关文章

  • 力扣19 删除链表的倒数第N个结点
    题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例: 输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5] 思路:给两个指针,让快指针和慢指......
  • 3.双向链表
    使用带head头的双向链表实现-水浒英雄排行榜管理的优缺点分析  1.单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找  2.单向项链表不能自我删除,需要......
  • 2. 两数相加 ----- 链表末尾赋值0,模拟
    给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和......
  • 单链表
    https://www.acwing.com/problem/content/828/ ////CreatedbyGeneson2020/12/12.////数组模拟单链表#include<iostream>usingnamespacestd;constint......
  • 141. 环形链表 ----- 哈希表、逆向思维、快慢指针
    给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整......
  • 实现链表的基本操作
    实现链表的基本操作因为单链表和双链表很相似,所以我使用了MVC设计模式简化了思路,并且使用Java语言编译首先在dao层抽取出节点,用于存放信息然后在service层分别实现单链......
  • 配置静态双向共路LSP示例
    本例描述了静态双向共路LSP的基本配置过程,包括使能MPLSTE,配置链路的MPLSTE带宽属性,配置MPLSTE隧道和创建静态双向共路LSP。静态双向共路LSP主要用于在MPLS网络中为承载......
  • 【腾讯面试题】单链表反转
    【腾讯面试题】单链表反转思路:先定义一个节点reverseHead=newNode();从头到尾遍历原来的链表,没遍历一个节点,就取出,并放在新的链表reverseHead的最前端原来的链表......
  • 2.链表
    1.链表介绍  链表是有序的列表,但是他在内存中的存储如下:。小结:链表是以节点的方式存储每个节点包含data域和next域(指向下一个节点)如图:发现每个节点并不是一定......
  • 【数据结构/C语言】借助于栈将一个带头结点的单链表L逆置
    编写算法Reverse(LinkList&L),要求借助于栈将一个带头结点的单链表L逆置。其中栈的初始化操作、入栈操作和出栈操作算法名分别为InitStack(&S)、Push(&S,e)、Pop(&S,&e),单......