【java】实现【双向链表】

it2023-12-24  62

public class DoubleLinkedListDemo {     public static void main(String[] args) {         DoubleLinkedList dList = new DoubleLinkedList();                  HeroNode2 n1= new HeroNode2(1, "卢俊义", "玉麒麟");         HeroNode2 n5= new HeroNode2(5, "关胜", "大刀");         HeroNode2 n7= new HeroNode2(7, "秦明", "霹雳火");         HeroNode2 n9= new HeroNode2(9, "花荣", "小李广");                  //测试添加         dList.add(n1);         dList.add(n5);         dList.add(n7);         dList.add(n9);         dList.showList();                  //测试修改         HeroNode2 n18= new HeroNode2(5, "徐宁", "金枪手");         dList.update(n18);         dList.showList();                  //测试删除 //        dList.del(1); //        dList.del(5); //        dList.del(7); //        dList.del(9); //        dList.showList();                  //测试按编号添加         HeroNode2 n8= new HeroNode2(8, "呼延灼", "双鞭");         HeroNode2 n10= new HeroNode2(10, "柴进", "小旋风");         dList.addByOrder(n8);         dList.addByOrder(n10);         dList.showList();     } }

/**  * 双向链表实现  * @author Administrator  *  */ class DoubleLinkedList{     private HeroNode2 head = new HeroNode2(0, "", "");          public HeroNode2 getHead() {         return head;     }

    /**      * 添加方法      * @param node      */     public void add( HeroNode2 node ) {         HeroNode2 temp = head;         while(true) {             if(temp.next == null) {                 break;             }             temp = temp.next;         }         temp.next = node;         node.pre = temp;     }          /**      * 按编号删除节点      *       * 需要注意的地方主要是:尾部节点移除特殊化,因为最后一个节点的next会是null      * 所以不处理会有空指针异常。还有需要注意的地方就是,链表操作时,其实最容易绕晕的地方就是节点的逻辑关系      * 实在想不明白,画图是理清思路的最好方式。      *       * @param num      */     public void del( int num ) {         if( num == 0 ) {             System.out.println( "=======头节点不能移除=======" );             return;         }                  HeroNode2 temp = head;                  while (true) {                          if( temp.next == null && temp.no != num ) {                 System.out.println( "当前编号:"+ num +"记录不存在" );                 break;             }                          if( temp.no == num ) {                 temp.pre.next = temp.next;                 if( temp.next !=null ) {                     temp.next.pre = temp.pre;                 }                 break;             }             temp = temp.next;         }     }          /**      * 修改节点信息      * @param node      */     public void update( HeroNode2 node ) {         HeroNode2 temp = head;         if( node == null ) {             return;         }                  while (true) {             if( temp.no == node.no) {                 if( !temp.name.equalsIgnoreCase(node.name) ) {                     temp.name = node.name;                 }                                  if( !temp.nickName.equalsIgnoreCase(node.nickName) ) {                     temp.nickName = node.nickName;                 }                 break;             }             temp = temp.next;         }     }          /**      * 显示列表      */     public void showList() {         HeroNode2 temp = head;         if( temp.next == null ) {             System.out.println( "=====列表为空=====" );             return;         }         System.out.println( "=====================================" );         while(true) {             if( temp == null ) {                 break;             }             System.out.println( temp );             temp = temp.next;         }         System.out.println( "=====================================" );     }          /**      * 按节点编号顺序添加节点      *       */     public void addByOrder( HeroNode2 node ) {         HeroNode2 temp = head.next;         HeroNode2 pre = null;         while (true) {             if( temp == null ) {                 pre.next = node;                 break;             }                          if( temp.no > node.no) {                 temp.pre.next = node;                 node.next = temp;                 break;             }             temp = temp.next;             if( temp !=null ) {                 pre = temp;             }         }              } }

class HeroNode2{     int no;     String name;     String nickName;     HeroNode2 pre;     HeroNode2 next;

    public HeroNode2(int no,String name,String nickName) {         this.no = no;         this.name = name;         this.nickName = nickName;     }

    @Override     public String toString() {         return "HeroNode2 [no=" + no + ", name=" + name + ", nickName=" + nickName +  "]";     } }  

最新回复(0)