双向链表 ゝ一世哀愁。 2022-11-05 12:57 195阅读 0赞 # 一:双向链表 # 双向链表的节点包含数据域,前置指针域和后置指针域 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3NDY5MDU1_size_16_color_FFFFFF_t_70][] 双向链表的增删查改代码实现: DoubleHeroNode实体类 package com.doublelinklist; /** * @author lizhangyu * @date 2021/3/6 16:28 */ public class DoubleHeroNode { public int no; public String name; public DoubleHeroNode next; public DoubleHeroNode pre; public DoubleHeroNode(int no, String name) { this.no = no; this.name = name; } @Override public String toString() { return "HeroNode{" + "no=" + no + ", name='" + name + '\'' + '}'; } } DoubleLinkList实体类 package com.doublelinklist; /** * @author lizhangyu * @date 2021/3/6 16:30 */ public class DoubleLinkList { DoubleHeroNode head = new DoubleHeroNode(0, ""); /** * 遍历 */ public void list() { if (head.next == null) { System.out.println("链表为空"); return; } DoubleHeroNode cur = head.next; while (true) { System.out.println(cur); if (cur.next == null) { break; } cur = cur.next; } } /** * 添加 * @param node */ public void add(DoubleHeroNode node) { DoubleHeroNode cur = head; while (true) { if (cur.next == null) { break; } cur = cur.next; } cur.next = node; node.pre = cur; } /** * 查找 * @param no */ public DoubleHeroNode find(int no) { DoubleHeroNode cur = head.next; if (cur == null) { System.out.println("链表为空"); return null; } while (true) { if (cur.no == no) { System.out.println("找到对应的节点:" + cur); return cur; } if (cur.next == null) { System.out.println("没有找到对应的节点"); break; } cur = cur.next; } return null; } /** * 修改 * @param node */ public void update(DoubleHeroNode node) { DoubleHeroNode oldNode = find(node.no); if (oldNode != null) { oldNode.name = node.name; }else { System.out.println("由于没有找到对应的节点,所以不能修改"); } } /** * 删除 * @param node */ public void delete(DoubleHeroNode node) { DoubleHeroNode cur = head; Boolean flag = false; while (true) { if (cur.next == null) { System.out.println("链表为空"); break; } if (cur.next.no == node.no) { flag = true; break; } cur = cur.next; } if (flag) { cur.next = cur.next.next; //避免是最后一个节点,从而出现空指针异常 if (cur.next.next != null) { cur.next.next.pre = cur.next.pre; } System.out.println("成功删除节点"); }else { System.out.println("没有找到对应的节点"); } } } DoubleLinkListDemo实体类 package com.doublelinklist; /** * @author lizhangyu * @date 2021/3/6 16:43 */ public class DoubleLinkListDemo { public static void main(String[] args) { //先创建节点 DoubleHeroNode hero1 = new DoubleHeroNode(1, "宋江"); DoubleHeroNode hero2 = new DoubleHeroNode(2, "卢俊义"); DoubleHeroNode hero3 = new DoubleHeroNode(3, "吴用"); DoubleHeroNode hero4 = new DoubleHeroNode(4, "林冲"); DoubleLinkList singleLinkList = new DoubleLinkList(); singleLinkList.add(hero1); singleLinkList.add(hero2); singleLinkList.add(hero3); singleLinkList.add(hero4); System.out.println("添加之后的链表为:"); singleLinkList.list(); System.out.println("查找编号为1的员工:"); singleLinkList.find(1); singleLinkList.list(); System.out.println("查找编号为5的员工:"); singleLinkList.find(5); singleLinkList.list(); DoubleHeroNode hero5 = new DoubleHeroNode(4, "林冲1"); System.out.println("修改员工信息:"); singleLinkList.update(hero5); singleLinkList.list(); System.out.println("删除员工信息:"); singleLinkList.delete(hero2); singleLinkList.list(); } } 测试的结果: 添加之后的链表为: HeroNode{no=1, name='宋江'} HeroNode{no=2, name='卢俊义'} HeroNode{no=3, name='吴用'} HeroNode{no=4, name='林冲'} 查找编号为1的员工: 找到对应的节点:HeroNode{no=1, name='宋江'} HeroNode{no=1, name='宋江'} HeroNode{no=2, name='卢俊义'} HeroNode{no=3, name='吴用'} HeroNode{no=4, name='林冲'} 查找编号为5的员工: 没有找到对应的节点 HeroNode{no=1, name='宋江'} HeroNode{no=2, name='卢俊义'} HeroNode{no=3, name='吴用'} HeroNode{no=4, name='林冲'} 修改员工信息: 找到对应的节点:HeroNode{no=4, name='林冲'} HeroNode{no=1, name='宋江'} HeroNode{no=2, name='卢俊义'} HeroNode{no=3, name='吴用'} HeroNode{no=4, name='林冲1'} 删除员工信息: 成功删除节点 HeroNode{no=1, name='宋江'} HeroNode{no=3, name='吴用'} HeroNode{no=4, name='林冲1'} Process finished with exit code 0 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3NDY5MDU1_size_16_color_FFFFFF_t_70]: /images/20221023/1171aec3f3594a818144d845e249f402.png
相关 双向链表 一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空 灰太狼/ 2022年12月21日 04:54/ 0 赞/ 195 阅读
相关 双向链表 一:双向链表 双向链表的节点包含数据域,前置指针域和后置指针域 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_ ゝ一世哀愁。/ 2022年11月05日 12:57/ 0 赞/ 196 阅读
相关 双向链表 APUE 308页 线程学习时候有一个链表 struct job{ struct job next; struct job prev; 古城微笑少年丶/ 2022年08月05日 05:20/ 0 赞/ 190 阅读
相关 双向链表 前面叙述了关于单链表、双端链表、有序链表的结点插入以及遍历查找等示例。这几种链表都只能从前往后进行遍历,反向遍历是非常麻烦的一件事。 考虑一下下面这个情况:如果文本编辑 亦凉/ 2022年07月18日 05:29/ 0 赞/ 217 阅读
相关 双向链表 一、解析 在单链表中,有了next指针,要查找下一节点的时间复杂度为O(1),如果要查找的是上一节点的话,最坏的时间复杂度是O(n)了,以为每次都要从头开始查找。为了克服这个 「爱情、让人受尽委屈。」/ 2022年07月03日 13:57/ 0 赞/ 275 阅读
相关 双向链表 /双向链表/ include<stdio.h> typedef struct dbnode { int num; 骑猪看日落/ 2022年06月16日 13:08/ 0 赞/ 210 阅读
相关 双向链表和双向循环链表 双向链表和双向循环链表 和单向链表相比,多了一个前驱结点。如果他为空,那么next和prior都指向自己。而对于双循环链表,只需要最后一个元素的next指向head->n ╰+哭是因爲堅強的太久メ/ 2022年05月16日 01:29/ 0 赞/ 276 阅读
相关 双向链表 Problem Description 学会了单向链表,我们又多了一种解决问题的能力,单链表利用一个指针就能在内存中找到下一个位置,这是一个不会轻易断裂的链。但单链表有一个弱 忘是亡心i/ 2022年05月10日 04:34/ 0 赞/ 284 阅读
相关 双向链表 题目描述 构建一个双向链表并进行删除和插入操作,按要求输出。 输入 输入: 第一行输入元素个数M 第二行输入M个元素 第三行输入删除位置 第四行输入插入位 野性酷女/ 2022年04月04日 05:48/ 0 赞/ 263 阅读
相关 双向链表 【一】双向链表 > 单向链表,查找的只能是一个方向,而双向链表可以向前或向后查找。 > 单向链表不能自我删除,需要靠辅助节点;而双向链表可以自我删除 > 双向链表中的 小咪咪/ 2021年08月12日 00:11/ 0 赞/ 435 阅读
还没有评论,来说两句吧...