博客
关于我
Java实现无头双向链表
阅读量:528 次
发布时间:2019-03-08

本文共 8765 字,大约阅读时间需要 29 分钟。

Java???????????

1. ???????

class ListNode {
public int data;
public ListNode next; // ????
public ListNode prev; // ????
public ListNode(int data) {
this.data = data;
}
}

2. ????????

public class DoubleLinkedList {
public ListNode head; // ???
public ListNode tail; // ???
}

3. ?????

// ???
public void addFirst(int data) {
ListNode node = new ListNode(data);
if (this.head == null) {
this.head = node;
this.tail = node;
} else {
node.next = this.head;
this.head.prev = node;
this.head = node;
}
}

4. ?????

// ???
public void addLast(int data) {
ListNode node = new ListNode(data);
if (this.head == null) {
this.tail = node;
this.head = node;
} else {
this.tail.next = node;
node.prev = this.tail;
this.tail = node;
}
}

5. ??????

// ????
public void display() {
ListNode cur = this.head;
while (cur != null) {
System.out.print(cur.data + " ");
cur = cur.next;
}
System.out.println();
}

6. ????????

// ???????????????0???
public void addIndex(int index, int data) {
if (index < 0 || index > size()) {
return;
}
if (index == 0) {
addFirst(data);
return;
}
if (index == size()) {
addLast(data);
return;
}
ListNode cur = searchIndex(index);
ListNode node = new ListNode(data);
node.next = cur;
node.prev = cur.prev;
cur.prev.next = node;
cur.prev = node;
}
public ListNode searchIndex(int index) {
ListNode cur = this.head;
while (index > 0) {
cur = cur.next;
index--;
}
return cur;
}
// ?????
public int size() {
ListNode cur = this.head;
int count = 0;
while (cur != null) {
cur = cur.next;
count++;
}
return count;
}

7. ??????????????

// ???????????key??
public void remove(int key) {
ListNode cur = this.head;
while (cur != null) {
if (cur.data == key) {
// ?????????
if (cur == this.head) {
this.head = this.head.next;
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;
} else {
cur = cur.next;
}
}
}

8. ??????????

public void removeAllkey(int key) {
ListNode cur = this.head;
while (cur != null) {
if (cur.data == key) {
// ?????????
if (cur == this.head) {
this.head = this.head.next;
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;
}
}

9. ????

// ??????
public void clear() {
ListNode cur = this.head;
ListNode curNext;
while (cur != null) {
curNext = cur.next;
cur.next = null;
cur.prev = null;
cur = curNext;
}
this.head = null;
this.tail = null;
}

10. ??????????

// ?????????key
public boolean contains(int key) {
if (head == null) {
return false;
}
ListNode cur = this.head;
while (cur != null) {
if (cur.data == key) {
return true;
}
cur = cur.next;
}
return false;
}

11. ????

public class Test {
public static void main(String[] args) {
DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
doubleLinkedList.addFirst(3);
doubleLinkedList.addFirst(3);
doubleLinkedList.addFirst(3);
doubleLinkedList.addLast(4);
doubleLinkedList.addLast(5);
doubleLinkedList.addLast(3);
// 3 2 1 4 5 6
doubleLinkedList.display();
doubleLinkedList.addIndex(3, 999);
// 3 2 1 999 4 5 6
doubleLinkedList.display();
doubleLinkedList.remove(5);
doubleLinkedList.display();
System.out.println(doubleLinkedList.contains(9));
doubleLinkedList.removeAllkey(3);
doubleLinkedList.display();
doubleLinkedList.clear();
System.out.println("dadedsffw");
}
}

12. ????

import java.util.List;
/**
* @Author ??
* @Date 2020/7/31
* @Time 10:54
*/
class ListNode {
public int data;
public ListNode next; // ????
public ListNode prev; // ????
public ListNode(int data) {
this.data = data;
}
}
public class DoubleLinkedList {
public ListNode head; // ???
public ListNode tail; // ???
// ???
public void addFirst(int data) {
ListNode node = new ListNode(data);
if (this.head == null) {
this.head = node;
this.tail = node;
} else {
node.next = this.head;
this.head.prev = node;
this.head = node;
}
}
// ???
public void addLast(int data) {
ListNode node = new ListNode(data);
if (this.head == null) {
this.tail = node;
this.head = node;
} else {
this.tail.next = node;
node.prev = this.tail;
this.tail = node;
}
}
// ????
public void display() {
ListNode cur = this.head;
while (cur != null) {
System.out.print(cur.data + " ");
cur = cur.next;
}
System.out.println();
}
// ???????????????0???
public void addIndex(int index, int data) {
if (index < 0 || index > size()) {
return;
}
if (index == 0) {
addFirst(data);
return;
}
if (index == size()) {
addLast(data);
return;
}
ListNode cur = searchIndex(index);
ListNode node = new ListNode(data);
node.next = cur;
node.prev = cur.prev;
cur.prev.next = node;
cur.prev = node;
}
public ListNode searchIndex(int index) {
ListNode cur = this.head;
while (index > 0) {
cur = cur.next;
index--;
}
return cur;
}
// ?????
public int size() {
ListNode cur = this.head;
int count = 0;
while (cur != null) {
cur = cur.next;
count++;
}
return count;
}
// ???????????key??
public void remove(int key) {
ListNode cur = this.head;
while (cur != null) {
if (cur.data == key) {
// ?????????
if (cur == this.head) {
this.head = this.head.next;
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;
} else {
cur = cur.next;
}
}
}
// ????key??
public void removeAllkey(int key) {
ListNode cur = this.head;
while (cur != null) {
if (cur.data == key) {
// ?????????
if (cur == this.head) {
this.head = this.head.next;
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() {
ListNode cur = this.head;
ListNode curNext;
while (cur != null) {
curNext = cur.next;
cur.next = null;
cur.prev = null;
cur = curNext;
}
this.head = null;
this.tail = null;
}
// ?????????key
public boolean contains(int key) {
if (head == null) {
return false;
}
ListNode cur = this.head;
while (cur != null) {
if (cur.data == key) {
return true;
}
cur = cur.next;
}
return false;
}
}

转载地址:http://coanz.baihongyu.com/

你可能感兴趣的文章
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
NFV商用可行新华三vBRAS方案实践验证
查看>>
ng build --aot --prod生成文件报错
查看>>
ng 指令的自定义、使用
查看>>
nghttp3使用指南
查看>>
Nginx
查看>>
nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
查看>>
nginx 1.24.0 安装nginx最新稳定版
查看>>
nginx 301 永久重定向
查看>>
nginx css,js合并插件,淘宝nginx合并js,css插件
查看>>
Nginx gateway集群和动态网关
查看>>
Nginx Location配置总结
查看>>
Nginx log文件写入失败?log文件权限设置问题
查看>>
Nginx Lua install
查看>>