首先创建一个链表对象Node,包含链表存放内容item,存储前一个节点的prev和存储后一个节点的next,并给它相应的构造器
//创建一个节点对象
class Node<E>{
E item;//链表存放内容
Node<E> next;//指向下一个节点
Node<E> prev;//指向上一个节点
public Node() {
}
public Node(E item) {
this.item = item;
this.next = null;
this.prev = null;
}
public Node(E item, Node<E> next, Node<E> prev) {
this.item = item;
this.next = next;
this.prev = prev;
}
}
定义一个class类LinkedList,给它3个属性分别用来存放头结点,尾结点以及链表数量
public class LinkedList<E> {
Node<E> head;//记录头结点
Node<E> last;//记录尾结点
int size = 0;//记录链表个数
}
头插法
//头插法:将元素插入链表第一个
public boolean addFirst(E e){
Node<E> node = new Node<>(e);
if (size == 0) {
this.head = this.last = node;
node.prev = null;
}else {
this.head.prev = node;
node.next = this.head;
this.head = node;
}
this.size++;
return true;
}
尾插法
//尾插法:将元素插入链表最后一个
public boolean addLast(E e){
Node<E> node = new Node<>(e);
if (size == 0) {
this.head = this.last = node;
node.next = null;
}else {
this.last.next = node;
node.prev = this.last;
this.last = node;
}
this.size++;
return true;
}
拆链
public void unLinked(Node<E> node){
if (node.prev == null) {
node.next.prev = null;
this.head = node.next;
} else {
node.prev.next = node.next;
node.prev = null;
}
if (node.next == null) {
node.prev.next = null;
this.last = node.prev;
}else {
node.next.prev = node.prev;
node.next = null;
}
node.item = null;
size--;
}
移除某一个节点
//删除一个节点
public boolean remove(E item){
for (Node<E> i = this.head; i != null ; i=i.next) {
if (item.equals(i.item)) {
unLinked(i);
return true;
}
}
return false;
}
完整代码
/**
* @author LDMushroom
* @date 2023/4/2
* 构建一个链表
*/
public class LinkedList<E> {
Node<E> head;//记录头结点
Node<E> last;//记录尾结点
int size = 0;//记录链表个数
//头插法:将元素插入第一个
public boolean addFirst(E e){
Node<E> node = new Node<>(e);
if (size == 0) {
this.head = this.last = node;
node.prev = null;
}else {
this.head.prev = node;
node.next = this.head;
this.head = node;
}
this.size++;
return true;
}
//尾插法:将元素插入最后一个
public boolean addLast(E e){
Node<E> node = new Node<>(e);
if (size == 0) {
this.head = this.last = node;
node.next = null;
}else {
this.last.next = node;
node.prev = this.last;
this.last = node;
}
this.size++;
return true;
}
//拆链法
public void unLinked(Node<E> node){
if (node.prev == null) {
node.next.prev = null;
this.head = node.next;
} else {
node.prev.next = node.next;
node.prev = null;
}
if (node.next == null) {
node.prev.next = null;
this.last = node.prev;
}else {
node.next.prev = node.prev;
node.next = null;
}
node.item = null;
size--;
}
//删除一个节点
public boolean remove(E item){
for (Node<E> i = this.head; i != null ; i=i.next) {
if (item.equals(i.item)) {
unLinked(i);
return true;
}
}
return false;
}
}
//创建一个节点对象
class Node<E>{
E item;//链表存放内容
Node<E> next;//指向下一个节点
Node<E> prev;//指向上一个节点
public Node() {
}
public Node(E item) {
this.item = item;
this.next = null;
this.prev = null;
}
public Node(E item, Node<E> next, Node<E> prev) {
this.item = item;
this.next = next;
this.prev = prev;
}
}