圖解
代碼實現
package fun.xinghai.doublelist;
public class DoubleList {
public static void main(String[] args) {
System.out.println("測試addLast:");
DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
Node node1 = new Node(1, "戈薇");
Node node2 = new Node(2, "桔梗");
Node node3 = new Node(3, "珊瑚");
doubleLinkedList.addLast(node1);
doubleLinkedList.addLast(node2);
doubleLinkedList.addLast(node3);
doubleLinkedList.print();
System.out.println("===============");
System.out.println("測試insert:");
Node node4 = new Node(4, "玲");
Node node5 = new Node(5, "神樂");
doubleLinkedList.insert(node4, 0);
doubleLinkedList.insert(node5, 2);
doubleLinkedList.print();
System.out.println("===============");
System.out.println("測試delect:");
doubleLinkedList.delect(node4);
doubleLinkedList.delect(node5);
doubleLinkedList.print();
System.out.println("===============");
System.out.println("測試updata:");
Node node6 = new Node(3, "神樂");
doubleLinkedList.updata(node6);
doubleLinkedList.print();
}
}
class DoubleLinkedList {
public Node head = new Node(0, "");
public Node getHead() {
return head;
}
public int getSize() {
int count = 0;
Node temp = head.next;
while(true) {
if(temp == null) {
break;
}
count++;
temp = temp.next;
}
return count;
}
public void addLast(Node newNode) {
Node temp = head;
while(true) {
if(temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = newNode;
newNode.pre = temp;
}
public void insert(Node newNode, int index) {
int count = -1;
Node temp = head;
if(index < 0 || index > getSize()) {
System.out.println("插入位置不合理!");
return;
}
while(true) {
if(count == index - 1) {
break;
}
count++;
temp = temp.next;
}
newNode.next = temp.next;
newNode.pre = temp;
if(temp.next != null) {
temp.next.pre = newNode;
}
temp.next = newNode;
}
public void delect(Node delNode) {
if(head.next == null) {
System.out.println("鏈表爲空,無法刪除!");
return;
}
Node temp = head.next;
boolean flag = false;
while(true) {
if(temp.no == delNode.no) {
flag = true;
break;
}
if(temp == null) {
break;
}
temp = temp.next;
}
if(flag) {
temp.pre.next = temp.next;
if(temp.next != null) {
temp.next.pre = temp.pre;
}
}else {
System.out.println("沒有找到待刪除的節點!");
}
}
public void updata(Node newNode) {
if(head.next == null) {
System.out.println("鏈表爲空,無法修改!");
return;
}
Node temp = head.next;
boolean flag = false;
while(true) {
if(temp.no == newNode.no) {
flag = true;
break;
}
if(temp.next == null) {
break;
}
temp = temp.next;
}
if(flag) {
temp.data = newNode.data;
}else {
System.out.println("沒有找到待修改的節點!");
}
}
public void print() {
if(head.next == null) {
System.out.println("鏈表爲空!");
return;
}
Node temp = head.next;
while(true) {
if(temp == null) {
break;
}
System.out.println(temp);
temp = temp.next;
}
}
}
class Node {
public int no;
public String data;
public Node next;
public Node pre;
public Node(int no, String data) {
this.no = no;
this.data = data;
}
@Override
public String toString() {
return "Node [no=" + no + ", data=" + data + "]";
}
}