1. 获取长度
//长度
public int size(){
Node cur = this.head;
int count = 0;
while (cur !=null) {
count++;
cur = cur.next;
}
return count;
}
2. 打印
//打印
public void display(){
Node cur = this.head;
while (cur != null){
System.out.print(cur.val + " ");
cur = cur.next;
}
System.out.println();
}
3. 查找关键字Key是否在双向链表中
//查找关键字Key是否在双向链表中
public boolean contains(int key){
Node cur = this.head;
while (cur != null){
if (cur.val == key) {
return true;
}
cur = cur.next;
}
return false;
}
4.头插法
//头插法
public void addFirst(int data){
Node node = new Node(data);
if (this.head == null) {
this.head = node;
this.last = node;
}else{
node.next = head;
this.head.prev = node;
this.head = node;
}
}
调用:
public static void main(String[] args) {
MyDoubleList myDoubleList = new MyDoubleList();
myDoubleList.addFirst(1);
myDoubleList.addFirst(2);
myDoubleList.addFirst(3);
myDoubleList.display();
System.out.println(myDoubleList.size());
}
结果:
5. 尾插法
public void addLast(int data){
Node node = new Node(data);
if (this.head == null) {
this.head = node;
this.last = node;
}else{
this.last.next = node;
node.prev = this.last;
this.last = node;
}
}
6. 删除双向链表中第一次出现关键字为key的节点
public void remove(int key){
Node cur = this.head;
while (cur != null) {
if (cur.val == key) {
if (cur == this.head) {//删除的是头结点
this.head = this.head.next;
if (this.head != null) {
this.head.prev = null;
}else{//如果只有一个节点即头结点
this.last = null;//不能忘记否则会发生泄漏
}
}else{
cur.prev.next = cur.next;//相同代码提出来
if (cur.next != null) {//中间节点
cur.next.prev = cur.prev;
} else{//尾节点
this.last = cur.prev;
}
}
return;
}else{
cur = cur.next;
}
}
}
7. 删除所有值为key的节点
public void removeAllKey(int key){
Node cur = this.head;
while (cur != null) {
if (cur.val == key) {
if (cur == this.head) {//删除的是头结点
this.head = this.head.next;
if (this.head != null) {
this.head.prev = null;
}else{//如果只有一个节点即头结点
this.last = null;//不能忘记否则会发生泄漏
}
}else{
cur.prev.next = cur.next;//相同代码提出来
if (cur.next != null) {//中间节点
cur.next.prev = cur.prev;
} else{//尾节点
this.last = cur.prev;
}
}
//return;
}
}
cur = cur.next;//进不进if都要走一步
}
8. 清空双链表
public void clear(){
while (head != null) {
Node cur = head.next;
this.head.next = null;
this.head.prev = null;
this.head = cur;
}
this.last = null;//最后一个节点还被last引用,要把last置为空
}