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


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

package linked;

class LinkedTable{
    
}
public class LinkedTableTest {
    
    //構造單鏈表
    static Node node1 = new Node("name1");
    static Node node2 = new Node("name2");
    static Node node3 = new Node("name3");
    static Node node4 = new Node("name4");
    static Node node5 = new Node("name5");
    
    
    public static void main(String[] args)
    {
        //設置指針
        setPoint();
        
        //循環遍歷
        System.out.println("*******初始鏈表*******");
        out(node1,node5);
        System.out.println();
        
        //插入節點在node2的后面
        addNode(node2,node3);
        
        // 循環遍歷
        System.out.println("*******插入node2.5*******");
        out(node1, node5);
        System.out.println();
                
        //刪除節點
        node2.setNextNode(node3);
        node3.setNextNodeF(node2);
        
        // 循環遍歷
        System.out.println("*******刪除node2.5*******");
        out(node1, node5);
        System.out.println();
        
    }
    
    //設置指針
    public static void setPoint()
    {
        //設置正向指針
        node1.setNextNode(node2);
        node2.setNextNode(node3);
        node3.setNextNode(node4);
        node4.setNextNode(node5);
        //設置反向指針
        node5.setNextNodeF(node4);
        node4.setNextNodeF(node3);
        node3.setNextNodeF(node2);
        node2.setNextNodeF(node1);
    }
    
    //循環遍歷單鏈表
    public static void outLinked(Node startNode){
        Node node= new Node();
        node.setNextNode(startNode);
        do
        {
            node=node.getNextNode();
            System.out.print(node.getName()+"----");    
        }while(node.getNextNode()!=null);
    }
    
    //反向循環遍歷單鏈表
    public static void outLinkedF(Node endNode){
        Node node= new Node();
        node.setNextNodeF(endNode);
        do
        {
            node=node.getNextNodeF();
            System.out.print(node.getName()+"----");    
        }while(node.getNextNodeF()!=null);
    }
    
    //循環遍歷
    public static void out(Node startNode,Node endNode)
    {
        
        outLinked(startNode);
        System.out.println();
        outLinkedF(endNode);
        
    }
    
    //插入節點
    public static void addNode(Node preNode,Node nextNode)
    {
        Node node_add = new Node("name2.5");
        node_add.setNextNode(preNode.getNextNode());
        preNode.setNextNode(node_add);
        
        node_add.setNextNodeF(nextNode.getNextNodeF());
        nextNode.setNextNodeF(node_add);
    }
    
    

    
}


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( )
    {
        
    }
    
}

1,構造node節點,需要兩個指針,一個正向存儲下一個元素的位置,一個反向存儲下一個元素的位置

參數說明:

  name:用於存儲node自身的信息

  nextNode:用於存儲正向指針

  nextNodeF:用於存儲反向指針

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( )
    {
        
    }
    
}

2,創建節點,設置指針連接節點

正向指針:指向下一個節點

反向節點:指向上一個節點

//構造單鏈表
    static Node node1 = new Node("name1");
    static Node node2 = new Node("name2");
    static Node node3 = new Node("name3");
    static Node node4 = new Node("name4");
    static Node node5 = new Node("name5");
    
public static void setPoint()
    {
        //設置正向指針
        node1.setNextNode(node2);
        node2.setNextNode(node3);
        node3.setNextNode(node4);
        node4.setNextNode(node5);
        //設置反向指針
        node5.setNextNodeF(node4);
        node4.setNextNodeF(node3);
        node3.setNextNodeF(node2);
        node2.setNextNodeF(node1);
    }

3,將鏈表循環遍歷輸出

public static void outLinked(Node startNode){
        Node node= new Node();
        node.setNextNode(startNode);
        do
        {
            node=node.getNextNode();
            System.out.print(node.getName()+"----");    
        }while(node.getNextNode()!=null);
    }
    public static void outLinkedF(Node endNode){
        Node node= new Node();
        node.setNextNodeF(endNode);
        do
        {
            node=node.getNextNodeF();
            System.out.print(node.getName()+"----");    
        }while(node.getNextNodeF()!=null);
    }

4,添加節點

    public static void addNode(Node preNode,Node nextNode)
    {
        Node node_add = new Node("name2.5");
        node_add.setNextNode(preNode.getNextNode());
        preNode.setNextNode(node_add);
        
        node_add.setNextNodeF(nextNode.getNextNodeF());
        nextNode.setNextNodeF(node_add);
    }

5,刪除節點

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM