您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法
双向链表(图文)
第十三双眼睛2022-06-05【数据结构与算法】人已围观
简介双向链表
单向链表的缺点:
单向链表查找的方向只能是一个方向,而双向链表可以向前查找,也可以向后查找。
单向链表不能自我删除,需要靠辅助节点,而双向链表可以自我删除。
定义一个节点
定义一个链表
测试一下
测试结果如下:
单向链表查找的方向只能是一个方向,而双向链表可以向前查找,也可以向后查找。
单向链表不能自我删除,需要靠辅助节点,而双向链表可以自我删除。
定义一个节点
package com.xingchen.day004; public class HeroNode { public int no; public String name; public String nickName; public HeroNode pre; public HeroNode next; public HeroNode() { super(); } public HeroNode(int no, String name, String nickName) { super(); this.no = no; this.name = name; this.nickName = nickName; } } |
package com.xingchen.day004; public class DoubleLinkedList { private HeroNode headNode = new HeroNode(0,"",""); // 添加node public void add(HeroNode node){ HeroNode temp = headNode; while(true){ if(temp.next==null){ break; } temp = temp.next; } temp.next = node; node.pre = temp; } // 删除一个节点 public void delete(int no){ HeroNode temp=headNode; boolean flag=false; while(true){ if(temp==null){ break; } if(temp.no==no){ flag=true; break; } temp=temp.next; } if(flag){ temp.pre.next=temp.next; if(temp.next==null){ return; } temp.next.pre=temp.pre; }else{ System.out.println("节点不存在:"+no); } } // 根据编号来修改 public void update(HeroNode node){ if(headNode.next==null){ System.out.println("链表为空"); return; } HeroNode temp = headNode; boolean flag=false; while(true){ if(temp==null){ break; } if(temp.no==node.no){ flag=true; break; } temp=temp.next; } if(flag){ temp.name=node.name; temp.nickName=node.nickName; }else{ System.out.println("没有找到要修改的节点:"+node.no); } } // 遍历链表 public void list(){ if(headNode.next==null){ System.out.println("链表为空"); return; } HeroNode temp = headNode.next; while(true){ if(temp==null){ break; } System.out.println(temp); temp=temp.next; } } } |
package com.xingchen.day004; public class DoubleLinkedListDemo { public static void main(String[] args) { HeroNode node1 = new HeroNode(1,"宋江","及时雨"); HeroNode node2 = new HeroNode(2,"卢俊义","玉麒麟"); HeroNode node3 = new HeroNode(3,"吴用","智多星"); HeroNode node4 = new HeroNode(4,"林冲","豹子头"); DoubleLinkedList doubleLinkedList = new DoubleLinkedList(); doubleLinkedList.add(node1); doubleLinkedList.add(node2); doubleLinkedList.add(node3); doubleLinkedList.add(node4); System.out.println("添加之后的链表"); doubleLinkedList.list(); HeroNode node5 = new HeroNode(4,"公孙胜","入云龙"); doubleLinkedList.update(node5); System.out.println("修改之后的链表"); doubleLinkedList.list(); doubleLinkedList.delete(4); System.out.println("删除之后的链表"); doubleLinkedList.list(); } } |
添加之后的链表 HeroNode [no=1, name=宋江, nickName=及时雨] HeroNode [no=2, name=卢俊义, nickName=玉麒麟] HeroNode [no=3, name=吴用, nickName=智多星] HeroNode [no=4, name=林冲, nickName=豹子头] 修改之后的链表 HeroNode [no=1, name=宋江, nickName=及时雨] HeroNode [no=2, name=卢俊义, nickName=玉麒麟] HeroNode [no=3, name=吴用, nickName=智多星] HeroNode [no=4, name=公孙胜, nickName=入云龙] 删除之后的链表 HeroNode [no=1, name=宋江, nickName=及时雨] HeroNode [no=2, name=卢俊义, nickName=玉麒麟] HeroNode [no=3, name=吴用, nickName=智多星] |
Tags:
很赞哦! ()