链表

单链表的添加和删除元素

public class LinkedList<E> {
  private Node head;
  private int size;

  public LinkedList() {
      this.head = null;
      this.size = 0;
  }

public void add(int index, E e) {
    if (index < 0 || index > size) {
        throw new IllegalArgumentException("index 错误");
    }

    if (index == 0) {
        addFirst(e);
    } else {
        Node prev = head;
        for (int i = 0; i < index - 1; i++) {
            prev = prev.next;
        }
        Node node = new Node(e);
        node.next = prev.next;
        prev.next = node;
        size++;
    }

}

public void addFirst(E e) {
    Node node = new Node(e);
    node.next = head;
    head = node;
    size++;
}

public int getSize() {
    return size;
}

public boolean isEmpty() {
    return size == 0;
}

public E remove(int index) {
    if (index < 0 || index > size) {
        throw new IllegalArgumentException("索引错误");
    }
    if (index == 0) {
        return removeFirst();
    } else {
        Node prev = head;
        for (int i = 0; i < index - 1; i++) {
            prev = prev.next;
        }
        Node removeNode = prev.next;
        prev.next = removeNode.next;
        removeNode.next = null;
        size--;
        return removeNode.e;
    }

}

public E removeFirst() {
    Node node = head;
    head = head.next;
    size--;
    return node.e;
}

@Override
public String toString() {
    StringBuilder str = new StringBuilder();
    Node node = this.head;
    while (node != null) {
        str.append(node.e);
        str.append("->");
        node = node.next;
    }
    str.append("NULL");
    return str.toString();
}

private class Node {
    public Node next;
    public E e;

    public Node(Node next, E e) {
        this.next = next;
        this.e = e;
    }

    public Node() {
        this(null, null);
    }

    public Node(E e) {
        this(null, e);
    }
}
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 4,712评论 1 45
  • 一、线性表的顺序存储设计与实现(顺序表) 1.1 顺序存储结构的设计原理概要 顺序存储结构底层是利用数组来实现的,...
    千涯秋瑟阅读 1,535评论 2 4
  • 目录 1、属性 2、链表和数组的区别 2.1、数组概述 2.2、数组和链表优缺点 2.3、链表和数组的比较 3、单...
    我哈啊哈啊哈阅读 2,925评论 1 41
  • 本文来自本人著作《趣学数据结构》 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那么...
    rainchxy阅读 3,874评论 6 20
  • 今天是三年一届的科技节,同学们早早的来到了学校,在操场上卢校长宣布:“三年一届科技节正式开始!”,大家都欢呼了起...
    快乐的小潼潼阅读 353评论 1 1

友情链接更多精彩内容