学习链表源码记录

创建一个节点类

package com.wxw.Link;

public class Node {

    private String nodeName;
    private Node next;
   
    public Node(String nodeName){
        this.nodeName = nodeName;
    }
   
    public Node getNext(){
        return this.next;
    }

    public String getNodeName() {
        return nodeName;
    }

    public void setNodeName(String nodeName) {
        this.nodeName = nodeName;
    }

    public void setNext(Node next) {
        this.next = next;
    }
   
   
    public boolean hasNext(){
        boolean is = false;
        if(null != this.next){
            is = true;
        }
        return is;
    }
   
   
}

 

 

创建一个链表

package com.wxw.Link;

public class Link {
    private Node head;
    public Link(Node head){
        this.head = head;
    }
   
   
    public void addNode(Node node){
        Node p = head;
        while(true){
            if(!p.hasNext()){
                p.setNext(node);
                break;
            }
            p = p.getNext();
        }
    }
   
    /**
     * 遍历节点
     */
    public void display(){
        Node p = head.getNext();
        while(true){
            System.out.println(p.getNodeName());
            if(p.getNext() == null){
                break;
            }
            p=p.getNext();
           
        }
    }
   
    /**
     * 插入到Node p后面的节点上
     * @param p
     * @param q
     */
    public void insertNode(Node p,Node q){
        q.setNext(p.getNext());
        p.setNext(q);
    }
   
    /**
     * 删除节点
     */
    public void delete(String nodeName){
        Node p = head;
        while(true){
            if(p.getNext().getNodeName() == nodeName){
                p.setNext(p.getNext().getNext());
                break;
            }
            p = p.getNext();
        }
    }
   
    public Node getNode(String nodeName){
        Node p = head;
        while(true){
            if(nodeName == p.getNodeName()){
                return p;
            }
            p = p.getNext();
        }
    }
   
    public Node getLastNode(){
        Node p = head;
        while(true){
            if(p.getNext() == null){
                return p;
            }
            p = p.getNext();
        }
    }
}

 

用链表实现的一个栈

package com.wxw.Link;

public class Stack {
   
    public Link link;
   
    public Stack(){
        this.link = new Link(new Node("head"));
    }
   
    /**
     * 进栈
     */
    public void push(String pushName){
        link.addNode(new Node(pushName));
    }
   
    /**
     * 出栈
     */
    public String pop(){
        String popName = link.getLastNode().getNodeName();
        link.delete(popName);
        return popName;
    }
}

 

测试类

package com.wxw.Link;

public class TestLink {
    public static void main(String[] args) {
        Node head = new Node("head");
        Node one = new Node("唐僧");
        Node tow = new Node("孙悟空");
        Node three = new Node ("猪八戒");
        Node four = new Node("沙和尚");
        Link link = new Link(head);
        link.addNode(one);
        link.addNode(tow);
        link.addNode(three);
        link.addNode(four);
        link.insertNode(one, new Node("白龙马"));
        //link.delete("白龙马");
        link.display();
    }
}

 

单向链表实现很简单,关键是需要一个去浮躁的心,慢慢去理解,并实现起来才会有学习的动力,否则,很难真正记住实现原理

posted @   wxwall  阅读(154)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示