package 链表;
public class DoubleLinkedListDemo {
public static void main(String[] args) {
DoubleLinkList doubleLinkList = new DoubleLinkList();
doubleLinkList.add(1);
doubleLinkList.add(4);
doubleLinkList.add(2);
doubleLinkList.add(3);
doubleLinkList.add(4);
doubleLinkList.show();
System.out.println("=========================");
doubleLinkList.update(2, 2);
doubleLinkList.show();
System.out.println("=========================");
doubleLinkList.delete(3);
doubleLinkList.show();
System.out.println("=========================");
doubleLinkList.add(5,5);
doubleLinkList.show();
System.out.println("=========================");
}
}
@SuppressWarnings({"all"})
class DoubleLinkList {
private DoubleLinkedListNode headNode = new DoubleLinkedListNode(0, null);
public void add(int val) {
DoubleLinkedListNode temp = headNode;
while (temp.nextNode != null)
temp = temp.nextNode;
temp.nextNode = new DoubleLinkedListNode(val, temp);
//插入节点后,链表长度+1
headNode.val++;
}
public void add(int val, int loc) {
DoubleLinkedListNode temp = headNode;
for (int i = 1; i < loc; i++) {
if (temp.nextNode == null)
break;
temp = temp.nextNode;
}
DoubleLinkedListNode newNode = new DoubleLinkedListNode(val, temp);
newNode.preNode = temp;
if (temp.nextNode != null)
newNode.nextNode = temp.nextNode;
temp.nextNode = newNode;
headNode.val++;
}
public void delete(int loc) {
if (loc > headNode.val)
throw new RuntimeException("超出链表长度");
DoubleLinkedListNode temp = headNode;
for (int i = 1; i <= loc; i++)
temp = temp.nextNode;
temp.preNode.nextNode = temp.nextNode;
//若删除节点是最后一个节点,会有空指针异常
if (temp.nextNode != null)
temp.nextNode.preNode = temp.preNode;
headNode.val--;
}
public void update(int val, int loc) {
DoubleLinkedListNode temp = headNode.nextNode;
for (int i = 1; i < loc; i++)
temp = temp.nextNode;
temp.val = val;
}
public void show() {
if (headNode.nextNode == null) {
System.out.println("链表为空!");
return;
}
DoubleLinkedListNode temp = headNode.nextNode;
while (temp != null) {
System.out.print(temp.val + " ");
temp = temp.nextNode;
}
System.out.println();
}
public int getLength() {
return headNode.val;
}
}
class DoubleLinkedListNode {
public int val;
public DoubleLinkedListNode preNode;
public DoubleLinkedListNode nextNode;
public DoubleLinkedListNode(int val, DoubleLinkedListNode preNode) {
this.val = val;
this.nextNode = null;
this.preNode = preNode;
}
@Override
public String toString() {
return "DoubleLinkedListNode{" +
"val=" + val +
", preNode=" + preNode +
", nextNode=" + nextNode +
'}';
}
}