zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/excellencesy/p/8651608.html
Copyright © 2011-2022 走看看