1. 数据结构和算法(二)Java实现单向链表
1.1 什么是单向链表
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;
链表是由结点构成,head指针指向第一个成为表头结点,而终止于最后一个指向NULL的指针。
- Data域–存放结点值的数据域
- Next域–存放结点的直接后继的地址(位置)的指针域(链域)
链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的,每个结点只有一个链域的链表称为单链表(Single Linked List)。
1.2 JAVA实现单向链表
CustomLinkedList类是一个自定义实现了单向链表。
package com.yuanxw.datastructure.chapter2;
/**
* 自定义单向链表CustomLinkedList
*/
public class CustomLinkedList<E> {
// 第一个节点元素
private Node first;
// 自定义LinkedList大小
private int size;
public CustomLinkedList() {
}
public CustomLinkedList(E element) {
this.addFirst(element);
}
public CustomLinkedList(E ...element) {
this.of(element);
}
/**
* 单向链表Node结构
*
* @param <E>
*/
private class Node<E> {
// Node节点value值
private E value;
// 下一个Node节点
private Node<E> next;
}
/**
* 是否是空
*
* @return
*/
private boolean isEmpty() {
return size == 0;
}
/**
* 添加元素
*
* @param element
* @return
*/
public boolean addFirst(E element) {
final Node<E> newNode = new Node<>();
newNode.value = element;
newNode.next = first;
this.first = newNode;
this.size++;
return true;
}
/**
* 添加多个元素
*
* @param elements
* @return
*/
private boolean of(E... elements) {
if (elements.length > 0) {
for (E element : elements) {
addFirst(element);
}
}
return true;
}
/**
* 删除元素
*
* @return
*/
private boolean removeFirst(