JAVA實現雙向鏈表的增刪功能

JAVA實現雙向鏈表的增刪功能,完整代碼 
 html

  1. package linked;
  2.  
  3. class LinkedTable{
  4.    
  5. }
  6. public class LinkedTableTest {
  7.    
  8.     //構造單鏈表
  9.     static Node node1 = new Node("name1");
  10.     static Node node2 = new Node("name2");
  11.     static Node node3 = new Node("name3");
  12.     static Node node4 = new Node("name4");
  13.     static Node node5 = new Node("name5");
  14.    
  15.    
  16.     public static void main(String[] args)
  17.     {
  18.         //設置指針
  19.         setPoint();
  20.         
  21.         //循環遍歷
  22.         System.out.println("*******初始鏈表*******");
  23.         out(node1,node5);
  24.         System.out.println();
  25.         
  26.         //插入節點在node2的後面
  27.         addNode(node2,node3);
  28.         
  29.         // 循環遍歷
  30.         System.out.println("*******插入node2.5*******");
  31.         out(node1, node5);
  32.         System.out.println();
  33.                
  34.         //刪除節點
  35.         node2.setNextNode(node3);
  36.         node3.setNextNodeF(node2);
  37.         
  38.         // 循環遍歷
  39.         System.out.println("*******刪除node2.5*******");
  40.         out(node1, node5);
  41.         System.out.println();
  42.         
  43.     }
  44.    
  45.     //設置指針
  46.     public static void setPoint()
  47.     {
  48.         //設置正向指針
  49.         node1.setNextNode(node2);
  50.         node2.setNextNode(node3);
  51.         node3.setNextNode(node4);
  52.         node4.setNextNode(node5);
  53.         //設置反向指針
  54.         node5.setNextNodeF(node4);
  55.         node4.setNextNodeF(node3);
  56.         node3.setNextNodeF(node2);
  57.         node2.setNextNodeF(node1);
  58.     }
  59.    
  60.     //循環遍歷單鏈表
  61.     public static void outLinked(Node startNode){
  62.         Node node= new Node();
  63.         node.setNextNode(startNode);
  64.         do
  65.         {
  66.             node=node.getNextNode();
  67.             System.out.print(node.getName()+"----");   
  68.         }while(node.getNextNode()!=null);
  69.     }
  70.    
  71.     //反向循環遍歷單鏈表
  72.     public static void outLinkedF(Node endNode){
  73.         Node node= new Node();
  74.         node.setNextNodeF(endNode);
  75.         do
  76.         {
  77.             node=node.getNextNodeF();
  78.             System.out.print(node.getName()+"----");   
  79.         }while(node.getNextNodeF()!=null);
  80.     }
  81.    
  82.     //循環遍歷
  83.     public static void out(Node startNode,Node endNode)
  84.     {
  85.         
  86.         outLinked(startNode);
  87.         System.out.println();
  88.         outLinkedF(endNode);
  89.         
  90.     }
  91.    
  92.     //插入節點
  93.     public static void addNode(Node preNode,Node nextNode)
  94.     {
  95.         Node node_add = new Node("name2.5");
  96.         node_add.setNextNode(preNode.getNextNode());
  97.         preNode.setNextNode(node_add);
  98.         
  99.         node_add.setNextNodeF(nextNode.getNextNodeF());
  100.         nextNode.setNextNodeF(node_add);
  101.     }
  102.    
  103.    
  104.  
  105.    
  106. }
  107.  
  108.  
  109. class Node {
  110.     private String name;
  111.     private Node nextNode;
  112.     private Node nextNodeF;
  113.     public void setName(String name)
  114.     {
  115.         this.name=name;
  116.     }
  117.     public void setNextNode(Node nextNode)
  118.     {
  119.         this.nextNode=nextNode;
  120.     }
  121.     public void setNextNodeF(Node nextNodeF)
  122.     {
  123.         this.nextNodeF=nextNodeF;
  124.     }
  125.     public String getName()
  126.     {
  127.         return this.name;
  128.     }
  129.     public Node getNextNode()
  130.     {
  131.         return this.nextNode;
  132.     }
  133.     public Node getNextNodeF()
  134.     {
  135.         return this.nextNodeF;
  136.     }
  137.     public Node(String name)
  138.     {
  139.         this.name=name;
  140.         this.nextNode=null;
  141.     }
  142.     public Node( )
  143.     {
  144.         
  145.     }
  146.    
  147. }

複製代碼node



1,構造node節點,須要兩個指針,一個正向存儲下一個元素的位置,一個反向存儲下一個元素的位置 
 
參數說明: 
  name:用於存儲node自身的信息 
  nextNode:用於存儲正向指針 
  nextNodeF:用於存儲反向指針 
 this

  1. class Node {
  2.     private String name;
  3.     private Node nextNode;
  4.     private Node nextNodeF;
  5.     public void setName(String name)
  6.     {
  7.         this.name=name;
  8.     }
  9.     public void setNextNode(Node nextNode)
  10.     {
  11.         this.nextNode=nextNode;
  12.     }
  13.     public void setNextNodeF(Node nextNodeF)
  14.     {
  15.         this.nextNodeF=nextNodeF;
  16.     }
  17.     public String getName()
  18.     {
  19.         return this.name;
  20.     }
  21.     public Node getNextNode()
  22.     {
  23.         return this.nextNode;
  24.     }
  25.     public Node getNextNodeF()
  26.     {
  27.         return this.nextNodeF;
  28.     }
  29.     public Node(String name)
  30.     {
  31.         this.name=name;
  32.         this.nextNode=null;
  33.     }
  34.     public Node( )
  35.     {
  36.         
  37.     }
  38.    
  39. }

複製代碼指針



2,建立節點,設置指針鏈接節點 
正向指針:指向下一個節點 
反向節點:指向上一個節點 
 htm

  1. //構造單鏈表
  2.     static Node node1 = new Node("name1");
  3.     static Node node2 = new Node("name2");
  4.     static Node node3 = new Node("name3");
  5.     static Node node4 = new Node("name4");
  6.     static Node node5 = new Node("name5");
  7.    

複製代碼blog



 

  1. public static void setPoint()
  2.     {
  3.         //設置正向指針
  4.         node1.setNextNode(node2);
  5.         node2.setNextNode(node3);
  6.         node3.setNextNode(node4);
  7.         node4.setNextNode(node5);
  8.         //設置反向指針
  9.         node5.setNextNodeF(node4);
  10.         node4.setNextNodeF(node3);
  11.         node3.setNextNodeF(node2);
  12.         node2.setNextNodeF(node1);
  13.     }

複製代碼get



3,將鏈表循環遍歷輸出 
 it

  1. public static void outLinked(Node startNode){
  2.         Node node= new Node();
  3.         node.setNextNode(startNode);
  4.         do
  5.         {
  6.             node=node.getNextNode();
  7.             System.out.print(node.getName()+"----");   
  8.         }while(node.getNextNode()!=null);
  9.     }

複製代碼class



 

  1.     public static void outLinkedF(Node endNode){
  2.         Node node= new Node();
  3.         node.setNextNodeF(endNode);
  4.         do
  5.         {
  6.             node=node.getNextNodeF();
  7.             System.out.print(node.getName()+"----");   
  8.         }while(node.getNextNodeF()!=null);
  9.     }

複製代碼循環



4,添加節點 
 

  1.     public static void addNode(Node preNode,Node nextNode)
  2.     {
  3.         Node node_add = new Node("name2.5");
  4.         node_add.setNextNode(preNode.getNextNode());
  5.         preNode.setNextNode(node_add);
  6.         
  7.         node_add.setNextNodeF(nextNode.getNextNodeF());
  8.         nextNode.setNextNodeF(node_add);
  9.     }

複製代碼



5,刪除節點 
 

  1. node2.setNextNode(node3);
  2. node3.setNextNodeF(node2);

複製代碼

      class Node {private String name;private Node nextNode;private Node nextNodeF;public void setName(String name){this.name=name;}public void setNextNode(Node nextNode){this.nextNode=nextNode;}public void setNextNodeF(Node nextNodeF){this.nextNodeF=nextNodeF;}public String getName(){return this.name;}public Node getNextNode(){return this.nextNode;}public Node getNextNodeF(){return this.nextNodeF;}public Node(String name){this.name=name;this.nextNode=null;}public Node( ){}}

相關文章
相關標籤/搜索