class Node {
public int data;
public Node next;
public Node prev;
public Node(int data) {
this.data = data;
}
}
public class MyLinkedList {
public Node head;
public Node tail;
//头插法
public void addFirst(int data) {
Node node = new Node(data);
if(this.head == null) {
this.head = node;
this.tail = node;
return;
}
node.next = this.head;
this.head.prev = node;
this.head = node;
}
//打印双链表
public void display() {
Node cur = this.head;
while(cur != null) {
System.out.print(cur.data +" ");
cur = cur.next;
}
System.out.println();
}
//尾插法
public void addLast(int data) {
Node node = new Node(data);
if(this.tail == null) {
this.head = node;
this.tail = node;
return;
}
this.tail.next = node;
node.prev = this.tail;
this.tail = node;
}
//查询该元素是否包含在链表中
public boolean contains(int key) {
Node cur = this.head;
while(cur != null) {
if(cur.data == key) {
return true;
}
cur = cur.next;
}
return false;
}
//链表的大小
public int size() {
Node cur = this.head;
int count = 0;
while(cur != null) {
count++;
cur = cur.next;
}
return count;
}
//在指定下标插入元素
public void addIndex(int index,int data){
checkIndex(index);
if(index == 0) {
addFirst(data);
return;
}
if(index == size()) {
addLast(data);
return;
}
Node cur = searchIndex(index);
Node node = new Node(data);
node.next = cur;
node.prev = cur.prev;
cur.prev.next = node;
cur.prev = node;
}
private void checkIndex(int index) {
if(index < 0 || index >size()) {
throw new RuntimeException("index位置不合法");
}
}
private Node searchIndex(int index) {
Node cur = this.head;
while(index != 0) {
cur = cur.next;
index--;
}
return cur;
}
//删除链表中第一个该元素
public int remove(int key){
Node cur = this.head;
while(cur != null) {
if(cur.data == key) {
int oldDate = cur.data;
if(cur == this.head) {
this.head = this.head.next;
if(this.head !=null) {
this.head.prev = null;
}
} else {
cur.prev.next = cur.next;
if(cur.next != null) {
cur.next.prev = cur.prev;
} else {
this.tail = cur.prev;
}
}
return oldDate;
}
cur = cur.next;
}
return -1;
}
//删除链表中所有该元素
public void removeAllKey(int key){
Node cur = this.head;
while(cur != null) {
if(cur.data == key) {
if(cur == this.head) {
this.head = this.head.next;
if(this.head != null) {
this.head.prev = null;
}
} else {
cur.prev.next = cur.next;
if(cur.next != null) {
cur.next.prev = cur.prev;
} else {
this.tail = cur.prev;
}
}
}
cur = cur.next;
}
}
//清空双链表
public void clear() {
while(this.head != null) {
Node cur = this.head.next;
this.head.next = null;
this.head.prev = null;
this.head = cur;
}
this.tail = null;
}
}
用java编制的双向链表
最新推荐文章于 2024-04-28 15:17:30 发布