java单链表的实现

JAVA版单链表的实现,其实只要理解思想就行,用什么语言实现不是问题。在此给出我用JAVA实现的简单单链表基本操作:

一共有三个类:

Node.java:定义单链表节点

NodeList.java:单链表操作类

main:测试类

public class Node {

    public Node next;
    public int data;
    public Node(int data) {
        this.data=data;
    }
}
public class NodeList {
    public Node firstListNode = null;
    //节点长度
    public int NodeLength = 0;
    
    /**
     * 打印出所有节点信息
     * @CreatDate 2019年1月24日 下午2:24:32
     */
    public void displayAll() {
        Node disNode=firstListNode;
        while (disNode!=null) {
        System.out.println(disNode.data);
        disNode=disNode.next;
        }
    }
    /**
     * 插入一个头节点(不删除原头节点)
     * 
     * @CreatDate 2019年1月24日 下午1:34:15
     * @param val
     */
    public void insertFirstNode(int val) {
        Node node = new Node(val);
        node.next = firstListNode;
        firstListNode = node;
        NodeLength++;
    }
    /**
     * 删除头节点,并返回头结点
     * 
     * @CreatDate 2019年1月24日 下午1:33:59
     * @return 头结点
     */
    public Node deleteFirstNode() {
        Node node = firstListNode;
        firstListNode = node.next;
        NodeLength--;
        return node;
    }
    /**
     * 增加一个节点
     * @CreatDate 2019年1月24日 下午2:18:56
     * @param val  要增加的节点值
     */
    public void add(int val) {
        if(NodeLength!=0) {
        Node node=new Node(val);
        findByindex(NodeLength).next=node;
        NodeLength++;
        }else {
            insertFirstNode(val);
        }
    }
    /**
     * 任意位置后插入节点
     * 
     * @CreatDate 2019年1月24日 下午1:20:17
     * @param index
     *            节点位置(从1开始)
     * @param val
     *            要插入的节点值
     * @return 执行结果,成功返回true,否则返回false
     */
    public boolean insertAfter(int index, int val) {
        Node node = new Node(val);
        //判断节点位置是否规范
        if (index > 0 && index <= NodeLength) {
            Node frontNode = findByindex(index);
            Node tempNode = frontNode.next;
            frontNode.next = node;
            node.next = tempNode;
            NodeLength++;
            return true;
        } else {
            return false;
        }
    }
    /**
     * 根据节点位置(从1开始)删除节点
     * 
     * @CreatDate 2019年1月24日 下午2:00:48
     * @param index
     *            index 节点位置(从1开始)
     * @return 执行结果,成功返回true,否则返回false
     */
    public boolean delateByindex(int index) {
        //判断节点位置是否规范
        if (index > 0 && index <= NodeLength) {
            if(index!=1) {
            Node node=findByindex(index-1);
            Node temNode=node.next.next;
            node.next=temNode;
            NodeLength--;
            }else {
                deleteFirstNode();
            }
            return true;
        }else {
            return false;
        }
    }
    /**
     * 根据节点位置(从1开始)查找返回节点
     * 
     * @CreatDate 2019年1月24日 下午1:19:19
     * @param index
     *            节点位置(从1开始)
     * @return 对应节点,如果节点位置不规范返回null
     */
    public Node findByindex(int index) {
        //判断节点位置是否规范
        if (index > 0 && index <= NodeLength) {
            Node node = firstListNode;
            int pos = 1;
            while (pos != index) {
                node = node.next;
                pos++;
            }
            return node;
        } else {
            return null;
        }
    }
}
public class Main {

    public static void main(String[] args) {
        NodeList nodeList=new NodeList();
        nodeList.add(1);
        nodeList.add(8);
        nodeList.displayAll();
        System.out.println(nodeList.insertAfter(1, 5));
        nodeList.displayAll();

    }
}

运行结果:

发表评论

电子邮件地址不会被公开。