//基于双向链表算法的集合
//建立一个内部类保存节点
private Node first;//第一个节点对象
private Node last;//最后一个节点对象
private int size;//链表的节点对象的个数
public void remove(Object ele) {
//找到被删除的节点
Node current = this.first;//第一个节点
//遍历节点
for (int i = 0; i < size; i++) {
if(!current.ele.equals(ele)) {
if(current.next==null) {
return;
}
current = current.next;
}
}
// System.out.println(current.ele);
//删除节点
if(current==first) {
this.first = current.next;
this.first.prev = null;
}else if(current==last) {
this.last = current.prev;
this.last.next = null;
}else {
current.prev.next = current.next;
current.next.prev = current.prev;
}
size--;//这个千万别忘了
}
public void addLast(Object ele) {
Node node = new Node(ele);//需要保存的节点对象
if(size==0) {//这个节点对象既是第一个也是最后一个
this.first = node;
this.last = node;
}else {
this.last.next = node;
node.prev = this.last;
this.last = node;
}
size++;
}
public void addFirst(Object ele) {
Node node = new Node(ele);//需要保存的节点对象
if(size==0) {//这个节点对象既是第一个也是最后一个
this.first = node;
this.last = node;
}else {
node.next = this.first;
this.first.prev = node;
this.first = node;
}
size++;
}
public String toString() {
if(size==0) {
return "[]";
}
Node current = this.first;//第一个节点
StringBuilder str = new StringBuilder(size*2+1);
str.append("[");
for (int i = 0; i < size; i++) {
str.append(current.ele);
if(i!=size-1) {
str.append(",");
}else {
str.append("]");
}
current = current.next;
}
return str.toString();
}
/*
* 链表中的节点
*/
class Node{
Node prev;//上一个节点对象
Node next;//下一个节点对象
Object ele;//当前节点的元素
public Node(Object ele) {
this.ele = ele;//将元素赋值给该节点
}
}
双向链表的操作
最新推荐文章于 2024-01-21 17:59:49 发布