单项链表java简单实现

单向链表

概念懂得都懂,不懂的是上面的人为了保护你,让你少知道点东西比较好,毕竟这东西你说它重要也确实重要,说他不重要也确实没那么重要,但是我觉得挺重要的.复制粘贴太损耗社会劳动力了,

通过节点类Node的next引用下一个节点的一种数据结构,

记录复习一下实现方法

package DataStrct.linklist;

/**
 * @author luke
 * @date 2021/4/1812:43
 */
public class SinglelinklistDemo {
     
    public static void main(String[] args) {
     
        SingleLinklist singleLinklist = new SingleLinklist(new Node(1, "第一个节点"));
        singleLinklist.add(new Node(2, "第二个节点"));
        singleLinklist.add(new Node(3, "第三个节点"));
        singleLinklist.add(new Node(4, "第四个节点"));
        singleLinklist.print_list();
    }

    static class Node {
     
        int node_id;
        String node_data;
        Node next_node;

        public Node(int node_id, String node_data) {
     
            this.node_id = node_id;
            this.node_data = node_data;
        }

        @Override
        public String toString() {
     
            return "node{" +
                    "node_id=" + node_id +
                    ", node_data='" + node_data +
                    '}';
        }
    }

    static class SingleLinklist {
     
        Node head;

        SingleLinklist(Node node) {
     
            head = node;
        }


        public void add(Node node) {
     
            //添加节点,直接添加到链表的最后
            //1.找到链表的最后一个节点--node.next = null
            Node tempnode = head;
            while (true) {
     
                //定义一个tempnode 变量用来存放当前遍历的节点
                if (tempnode.next_node == null) {
     
                    break; //next为null 说明是最后一个节点,跳出遍历循环
                } else if (tempnode.next_node != null) {
     
                    tempnode = tempnode.next_node;//如果下个节点不为空,则将下个节点赋予临时遍历继续遍历
                }
            }
            tempnode.next_node = node;
        }

        public void print_list() {
     
            //遍历打印链表
            Node temp = head;
            while (true) {
     
                //打印当前的节点
                System.out.println(temp);
                if (temp.next_node == null) {
     
                    break;
                }
                //将临时节点赋值为下个节点
                temp = temp.next_node;
            }
        }


    }
}

还有带排序的单项链表

package DataStrct.linklist;

/**
 * @author luke
 * @date 2021/4/1817:26
 */
public class SingleOrderlinklistDemo {
     
    public static void main(String[] args) {
     
        SingleOrderlinklist singleOrder = new SingleOrderlinklist(new Node(6, "第六个节点"));
        singleOrder.add(new Node(2, "第二个节点"));
        singleOrder.add(new Node(4, "第四个节点"));
        singleOrder.add(new Node(5, "第五个节点"));
        singleOrder.add(new Node(3, "第三个节点"));
        singleOrder.print_list();

        //修改
        singleOrder.update(new Node(5,"修改后的第五个节点" ));
        singleOrder.print_list();

    }

    static class Node {
     
        int id;
        String data;
        Node next;

        public Node(int id, String data) {
     
            this.id = id;
            this.data = data;
        }

        @Override
        public String toString() {
     
            return "Node{" +
                    "id=" + id +
                    ", data='" + data + '\'' +
                    '}';
        }
    }

    static class SingleOrderlinklist {
     
        Node head;

        public SingleOrderlinklist(Node head) {
     
            this.head = head;
        }

        public void add(Node node) {
     
            //按照顺序插入
            //1.通过比较插入节点id 直至遇到当前节点的下个节点的id比当前插入的id大时,插入到当前id的下个节点中
            Node tempnode = head;
            //先和头节点比较,如果小于头节点直接插入到头节点
            if (node.id<tempnode.id){
     
                node.next=tempnode;
                head=node;
                return;
            }
            while (true) {
     
                if (tempnode.next == null) {
     //当当前的节点下个为空时,需要比较插入节点和当前的节点的大小
                    break;
                }
                if (node.id < tempnode.next.id) {
     //因为是插入,所以要把当前节点的下个节点接入到插入节点的下个节点
                    break;
                }
                tempnode = tempnode.next;
            }
            node.next=tempnode.next;
            tempnode.next=node;
        }

        public void update(Node node){
     

            //遍历链表找到对应的节点,并更新里面的属性
            Node temp = head;
            while (true){
     
                if (temp==null){
     
                    break;
                }
                if (temp.id==node.id){
     
                    temp.data=node.data;
                    break;
                }
                temp=temp.next;
            }
        }

        //打印
        public void print_list() {
     
            Node tempnode = head;
            while (true) {
     
                System.out.println(tempnode);
                if (tempnode.next == null) {
     
                    break;
                }
                tempnode = tempnode.next;
            }
        }
    }
}

你可能感兴趣的:(Java设计模式,LeetCode,数据结构,java,算法,单链表,链表)