一:双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
二:使用代码实现 public class 双向链表 { public static void main(String[] args) { HeroNode2 name1=new HeroNode2(1,"小袁","世界上最帅的男人"); HeroNode2 name2=new HeroNode2(2,"xx","xx"); HeroNode2 name3=new HeroNode2(3,"符爱云","我愚蠢的组员"); HeroNode2 name4=new HeroNode2(4,"vv","xx"); SingleLinkedList2 singleLinkedList=new SingleLinkedList2(); singleLinkedList.add(name1); singleLinkedList.add(name4); singleLinkedList.add(name3); singleLinkedList.add(name2); singleLinkedList.list(); System.out.println("修改后---------------"); HeroNode2 n=new HeroNode2(2,"陆云杰","我愚蠢的组员"); singleLinkedList.update(n); singleLinkedList.list(); System.out.println("删除后--------------"); singleLinkedList.delete(4); singleLinkedList.list(); } } class SingleLinkedList2 { //定义头节点,不存放具体数据 private HeroNode2 head = new HeroNode2(0, "", ""); //返回头节点 public HeroNode2 getHead(){ return head; } // 添加一个节点到双向链表的最后. public void add(HeroNode2 heroNode) { // 因为head节点不能动,因此我们需要一个辅助遍历 temp HeroNode2 temp = head; // 遍历链表,找到最后 while (true) { // 找到链表的最后 if (temp.next == null) {// break; } // 如果没有找到最后, 将将temp后移 temp = temp.next; } // 当退出while循环时,temp就指向了链表的最后 // 形成一个双向链表 temp.next = heroNode; heroNode.pre = temp; } //定义修改节点方法 public void update(HeroNode2 newHeroNode){ if(head.next==null){ System.out.println("链表为空"); return; } //定义辅助变量 HeroNode2 temp=head.next; //定义标志 boolean flag=false; while (true) { if (temp == null) { break; } if(temp.SerialNumber==newHeroNode.SerialNumber){ flag=true; break; } temp=temp.next; } if(flag){ temp.name=newHeroNode.name; temp.information=newHeroNode.information; }else { System.out.println("没有找到"); } } //双向链表可以直接找到,自我删除。 public void delete(int SerialNumber){ if(head.next==null){ System.out.println("链表为空"); return; } HeroNode2 temp=head.next; boolean flag=false; while (true){ if(temp==null){ break; } if(temp.SerialNumber==SerialNumber){ flag=true; break; } temp=temp.next; } if(flag){ temp.pre.next=temp.next; if(temp.next!=null) { temp.next.pre = temp.pre; } } } //遍历 public void list(){ //判断链表是否为空 if(head.next==null){ System.out.println("链表为空"); return; } //定义辅助变量 HeroNode2 temp=head.next; while (true){ //判断是否到链表最后 if(temp==null){ break; } System.out.println(temp); //将temp后移,不然会死循环 temp=temp.next; } } } class HeroNode2{ public int SerialNumber; public String name; public String information; public HeroNode2 next; //指向下一个节点,默认为null public HeroNode2 pre;//指向前一个节点,默认为null public HeroNode2(int SerialNumber,String name,String information){ this.SerialNumber=SerialNumber; this.name=name; this.information=information; } @Override public String toString() { return "HeroNode{" + "SerialNumber=" + SerialNumber + ", name='" + name + '\'' + ", information='" + information + '\''; } }
|
|