单项链表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;
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值