单项链表java简单实现

Posted 大树的困惑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单项链表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简单实现的主要内容,如果未能解决你的问题,请参考以下文章

单项链表的实现

2.3实现一个算法,删除单项链表中间的某个结点,假定你只能访问该结点。

单项链表

js 单项链表

java实现链表求救

如何实现一个高效的单向链表逆序输出?(详解)