单向链表,java代码实现

先创建一个节点类

//创建一个节点类
public class Node {

    Node next = null;//设置下一个节点为null

    Object date; //数据

    public Node(Object date) {
        this.date = date;
    }

}

单向链表类

public class OnewayList {

    private Node head;//单向列表表头节点


    //单向列表插入数据
    public void insert(Object data) {
        //表头没数据,则数据插入到第一个位置
        if (head == null) {
            head = new Node(data);
        } else {
            Node tmp = head;
            int i = 1;
            //判断链表下一个数据是否存在
            while (tmp.next != null) {
                //数据存在则继续判断下一个,知道链表末尾
                tmp = tmp.next;
                i++;
            }
            //将数据插入到链表末尾的下一个
            tmp.next = new Node(data);
        }
    }

    //在指定位置插入数据
    public void insert(Object data, int index) throws Exception {
        if (index > length() - 1) {
            throw new Exception("超过链表长度");
        }
        if (index == 0) {
            Node node = new Node(data);
            node.next = head;
            head = node;
            return;
        }
        int i = 1;
        Node left = head;
        Node tmp = head.next;
        while (i <= index) {
            if (i == index) {
                Node node = new Node(data);
                node.next = tmp;
                left.next = node;
            } else {
                left = left.next;
                tmp = tmp.next;
            }
            i++;
        }
    }

    //根据下标删除数据
    public void delete(int i) throws Exception {
        if (head == null) {
            throw new Exception("链表为空,无法删除");
        }
        if (i == 0) {
            head = head.next;
            return;
        }
        Node left = head;
        Node tmp = head.next;
        int index = 1;
        while (i >= index && tmp != null) {
            if (i == index) {
                left.next = tmp.next;
            } else {
                tmp = tmp.next;
                left = left.next;
            }
            index++;
        }
    }

    //指定区间删除数据
    public void delete(int start, int end) throws Exception {
        if (head == null) {
            throw new Exception("链表为空,无法删除");
        }
        if (start >= end || start < 0) {
            throw new Exception("数据错误");
        }
        if (start > length() - 1 || end > length() - 1) {
            throw new Exception("超过链表长度");
        }
        if (start == 0) {
            while (end > 0) {
                head = head.next;
                end--;
            }
        }
        Node left = head;
        Node right = head.next;
        int index = 1;
        while (index <= start ||  index <= end) {
            if (index < start) {
                left = left.next;
            }
            right = right.next;
            if (end == index) {
                left.next = right;
            }
            index++;
        }

    }

    //返回链表长度
    public int length() {
        if (head == null) {
            return 0;
        }
        int i = 1;
        Node tmp = head;
        while (tmp.next != null) {
            i++;
            tmp = tmp.next;
        }
        return i;
    }

    //打印链表数据
    public String prin() {
        StringBuilder a = new StringBuilder();
        if (head == null) {
            return "";
        }
        Node tmp = head;
        while (tmp != null) {
            a.append(tmp.date);
            tmp = tmp.next;
        }
        System.out.println(a.toString());
        return a.toString();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值