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

3.双向链表

时间:2022-11-16 21:58:20浏览次数:39  
标签:getNext temp 删除 no 链表 双向 name

使用带head头的双向链表实现-水浒英雄排行榜管理的优缺点分析

  1.单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找

  2.单向项链表不能自我删除,需要靠辅助节点,啊,双向链表可以自我删除,所以前面我们单链表删除时,总是找到temp(待删除节点的前一个节点)

新增:
     /**
     * 1.添加到末尾
     *
     * @param node
     */
    public void add(HeroNode2 node) {
        //定义一个临时变量,因为head不能变化,所以定义一个中间变量
        HeroNode2 tmp = head;
        //找到队列的最后一个元素,最后一个元素的next=null
        while (tmp.getNext() != null) {
            tmp = tmp.getNext();
        }
        tmp.setNext(node);
        //多这一行
        node.setPre(tmp);
    }
    
删除:
    /**
     * 根据编号删除
     *
     * @param no
     */
    public void delete(int no) {
        HeroNode2 temp = head.getNext();
        //找到需要删除的节点
        boolean flag = true;
        while (true) {
            if (temp == null) {
                flag = false;
                break;
            }
            //tmp就是需要删除节点
            if (temp.getNo() == no) {
                break;
            }
            temp = temp.getNext();
        }
        if (flag) {
            temp.getPre().setNext(temp.getNext());
            //重点1:这里需要考虑最后一个元素的删除,最后一个元素只需要执行上面的话即可,当执行下面temp.getNext()=null,null.setpre会报空指针
            if (temp.getNext() != null) {
                temp.getNext().setPre(temp.getPre());
            }
        } else {
            System.out.println("删除失败,链表中没有该节点:" + no);
        }
    }

 测试:

  

HeroNode{no=1, name='宋江', nickName='及时雨'}
HeroNode{no=2, name='卢俊义', nickName='玉麒麟'}
HeroNode{no=3, name='吴用', nickName='智多星'}
HeroNode{no=4, name='林冲', nickName='豹子头'}
删除2节点-----
HeroNode{no=1, name='宋江', nickName='及时雨'}
HeroNode{no=3, name='吴用', nickName='智多星'}
HeroNode{no=4, name='林冲', nickName='豹子头'}

 

标签:getNext,temp,删除,no,链表,双向,name
From: https://www.cnblogs.com/wmd-l/p/16897628.html

相关文章

  • 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),单......
  • 【数据结构/C语言】编写实现这个双向栈tws的入栈操作Push(&tws, i ,e)和出栈操作的算
    假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在两个栈,它们的栈底分别设在数组的两个端点,栈顶指针分别指示栈顶元素的下一存储单元。试编写实现这个双向栈t......
  • 力扣24 两两交换链表中的节点
    题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例:输入:head=[1,2,3,4]......