链表基本概念

链表是由一系列节点组成的数据结构,节点可以在运行过程中动态生成。每个节点包含两部分内容:存储数据的数据域;存储下一个节点地址的指针域。

单向链表

链表节点的定义
public class Node {
    //结点存放的数据
    private Integer data;
    //存放的下一个结点的内存地址
    private Node next;

    public Node(Integer data) {
        this.data = data;
    }

    public Integer getData() {
        return data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }
}
自定义单向链表的封装类
public class SinglyLinkedList {
    private Node head;
    private int size;

    /**
     * 添加数据到链表尾部
     * @param data
     * @return
     */
    public boolean add(Integer data){
        Node temp = new Node(data);
        if(head == null)
            head = temp;
        else{
            Node t = head;
            while(t.getNext() != null){
                t = t.getNext();
            }
            t.setNext(temp);
        }
        size++;
        return true;
    }

    /**
     * 将数据插入到指定位置
     * @param data
     * @param index
     * @return
     */
    public boolean add(Integer data,int index){
        if(index < 0 || index >= size){
            throw new RuntimeException("越界异常:index"+index+",size"+size);
        }
        Node node = new Node(data);
        if(index == 0){
            node.setNext(head);
            head = node;
        }else{
            Node temp = head;
            for (int i = 0; i < index-1; i++) {
                temp = temp.getNext();
            }
            node.setNext(temp);
            temp.setNext(node);
        }
        size++;
        return true;
    }

    /**
     * 删除最后一个值
     * @return 被删除节点的值
     */
    public Integer remove(){
        if(head == null){
            return null;
        }
        if(head.getNext() == null){
            Integer data = head.getData();
            head = null;
            size--;
            return data;
        }
        Node tlow = null;
        Node tfast = head;
        while(tfast.getNext() != null){
            tlow = tfast;
            tfast = tfast.getNext();
        }
        Integer data = tfast.getData();
        tlow.setNext(null);
        size--;
        return data;
    }

    /**
     * 删除指定位置元素
     * @param index
     * @return
     */
    public Integer remove(int index){
        if(index < 0 || index >= size){
            throw new RuntimeException("越界异常:index:"+index+",size:"+size);
        }
        if(index == 1){
            Integer data = head.getData();
            head = head.getNext();
            size--;
            return data;
        }
        Node tlow = null;
        Node tfast = head;
        for (int i = 0; i < index-1; i++) {
            tlow = tfast;
            tfast = tfast.getNext();
        }
        Integer data = tfast.getData();
        tlow.setNext(tfast.getNext());
        size--;
        return data;
    }

    /**
     * 获取指定位置元素
     * @param index
     * @return
     */
    public Integer get(int index){
        if(index < 0 || index >= size){
            throw new RuntimeException("越界异常:index:"+index+",size:"+size);
        }
        Node t = head;
        for (int i = 1; i < index; i++) {
            t = t.getNext();
        }
        return t.getData();
    }

    public void print(){
        Node temp = head;
        while(temp != null){
            System.out.println(temp.getData());
            temp = temp.getNext();
        }
    }

    public Node getHead() {
        return head;
    }
    
    public int getSize() {
        return size;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值