Java实现简单的单向链表

数据节点类
/**
 * 创建节点类  每一个节点就是链表上的一个数据
 */
public class Node {
    // 指定该节点的下一个节点
    Node nextNode = null;
    // 存储数据
    Object data;
    // 链表长度 不包括头节点
    int size = 0;
    // 提供有参构造方法
    public Node(Object data) {
        this.data = data;
    }

    public Node() {
        
    }
}
链表类
/**
 * 单链表
 */
public class MyList {

    // 创建链表的头节点 该节点只用来指向第一个数据  且保存链表数据个数()
    Node headNode;

    /**
     * 链表添加数据
     * @param data
     */
    public void add(Object data){
        Node newNode = new Node(data);
        // 判断头节点是否为null
        if (headNode == null) {
            headNode = new Node();
            headNode.nextNode = newNode;
            headNode.size++;
            return;
        }
        // 创建临时节点,避免头节点被改变
        Node tempNode = headNode;
        while (tempNode.nextNode != null) {
            tempNode = tempNode.nextNode;
        }
        tempNode.nextNode = newNode;
        headNode.size++;
    }

    /**
     *  根据索引删除数据   下标从0开始
     * @param index
     */
    public void delByIndex(int index) {
        if (headNode == null){
            return;
        }
        if (index > headNode.size - 1){
            throw new RuntimeException("超出链表最大长度");
        }
        Node preNode = headNode;
        Node curNode = headNode.nextNode;
        int num = 0;
        while (num < headNode.size) {
            if (num == index){
                if (headNode.size == 1) {
                    headNode.nextNode = null;
                } else {
                    preNode.nextNode = curNode.nextNode;
                }
                headNode.size--;
            }
            num++;
            preNode = preNode.nextNode;
            curNode = curNode.nextNode;
        }
    }

    /**
     * 根据索引获取节点数据
     * @param index
     * @return
     */
    public Object get(int index) {
        if (headNode == null) {
            return null;
        }
        if (index > headNode.size - 1) {
            throw new RuntimeException("超出链表最大长度");
        }
        int num = 0;
        Node preNode = headNode;
        Node curNode = headNode.nextNode;
        while (num < headNode.size) {
            if (index != num) {
                num++;
                preNode = preNode.nextNode;
                curNode = curNode.nextNode;
            } else {
                return curNode.data;
            }
        }
        return curNode.data;
    }

    /**
     * 根据数据链表删除数据  int
     * @param data
     */
    public void delByData(int data){
        if (headNode == null) {
            return;
        }
        Node preNode = headNode;
        Node curNode = headNode.nextNode;
        int num = 0;
        while (num < headNode.size) {
            if (data == Integer.parseInt(curNode.data+"")){
                if (headNode.size == 1){
                    preNode.nextNode = null;
                } else {
                    preNode.nextNode = curNode.nextNode;
                }
                headNode.size--;
            }
            preNode = preNode.nextNode;
            curNode = curNode.nextNode;
            num++;
        }
    }

    /**
     * 根据数据链表删除数据  String
     * @param data
     */
    public void delByData(String data){
        if (headNode == null) {
            return;
        }
        Node preNode = headNode;
        Node curNode = headNode.nextNode;
        int num = 0;
        while (num < headNode.size) {
            if (data.equals(curNode.data+"")){
                if (headNode.size == 1){
                    preNode.nextNode = null;
                } else {
                    preNode.nextNode = curNode.nextNode;
                }
                headNode.size--;
            }
            preNode = preNode.nextNode;
            curNode = curNode.nextNode;
            num++;
        }
    }

    /**
     * 删除整个链表
     */
    public void removeAll(){
        headNode.nextNode = null;
        headNode.size = 0;
    }

    /**
     * 输出链表内容
     */
    public void print(){
        if (headNode == null){
            return;
        }
        Node curNode = headNode.nextNode;
        while (curNode != null){
            System.out.print(curNode.data + " ");
            curNode = curNode.nextNode;
        }
        System.out.println();
    }

    /**
     *  输出链表长度(忽略头节点)
     * @return
     */
    public int size(){
        if (headNode == null){
            return 0;
        }
        int size = headNode.size;
        return size;
    }
}

测试类
public class Test {
    public static void main(String[] args) {
        MyList myList = new MyList();
        myList.add(1);
        myList.add(2);
        myList.add(3);
        myList.add("4");
        myList.add("5");
        System.out.println(myList.get(4));
        myList.delByIndex(4);
        System.out.println(myList.size());
        myList.print();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值