java实现循环链表的增删功能

java实现循环链表的增删功能,完整代码

package songyan.test.demo;

public class Demo {
    // java 实现循环链表
    public static void main(String[] args) {
        Node node1 = new Node("name1");
        Node node2 = new Node("name2");
        Node node3 = new Node("name3");
        Node node4 = new Node("name4");
        Node node5 = new Node("name5");

        node1.setNextNode(node2);
        node2.setNextNode(node3);
        node3.setNextNode(node4);
        node4.setNextNode(node5);
        node5.setNextNode(node1);

        // getNodes(node1);

        // 添加node2.5
        Node node11 = new Node("node2.5");
        node11.setNextNode(node2.getNextNode());
        node2.setNextNode(node11);
        // getNodes(node1);

        // 删除节点
        node2.setNextNode(node3);
        getNodes(node1);

    }

    public static void getNodes(Node startNode) {
        // 循环遍历
        Node node = startNode;
        do {
            System.out.println(node.getName());
            node = node.getNextNode();
        } while (node.getNextNode() != startNode.getNextNode());
    }
}

class Node {
    private String name;
    private Node nextNode;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Node getNextNode() {
        return nextNode;
    }

    public void setNextNode(Node nextNode) {
        this.nextNode = nextNode;
    }

    Node(String name) {
        this.name = name;
        this.nextNode = null;
    }

    Node() {
        this.nextNode = null;
    }

}

分段解读,

1,声明节点类【包括节点名称,指针】

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

2,创建节点

Node node1= new Node("name1");
Node node2= new Node("name2");
Node node3= new Node("name3");
Node node4= new Node("name4");
Node node5= new Node("name5");

3,设置指针

【这里不同于单链表的地方就是要给尾节点设置指向头结点的指针】

node1.setNextNode(node2);
node2.setNextNode(node3);
node3.setNextNode(node4);
node4.setNextNode(node5);
node5.setNextNode(node1);
        

3,循环遍历链表

注意:结束的条件不同于单链表的地方,

在单链表中结束条件是nextNode为空,

然而在这里,尾节点的指针式指向头结

点的,所以条件是节点的指针指向头结点

    public static void getNodes(Node startNode) {
        // 循环遍历
        Node node = startNode;
        do {
            System.out.println(node.getName());
            node = node.getNextNode();
        } while (node.getNextNode() != startNode.getNextNode());
    }

4,添加节点

【这里与单向链表完全相同】

Node node11=new Node("node2.5");
        node11.setNextNode(node2.getNextNode());
        node2.setNextNode(node11);
        

4,删除节点

【这里与单向链表完全相同】

node2.setNextNode(node3);
原文地址:https://www.cnblogs.com/excellencesy/p/8651608.html