【题目链接】
https://leetcode.cn/problems/design-linked-list/description/
【MyCode】
class MyLinkedList {
private static class Node {
int val;
Node next;
Node prev;
Node(int val) {
this.val = val;
}
}
private final Node head, tail;
int size;
public MyLinkedList() {
this.head = new Node(0);
this.tail = new Node(0);
head.next = tail;
tail.prev = head;
size = 0;
}
public int get(int index) {
if (index < 0 || index >= size) {
return -1;
}
Node p = head.next;
for (int i = 0; i < index; i++) {
p = p.next;
}
return p.val;
}
public void addAtHead(int val) {
Node x = new Node(val);
Node temp = head.next;
//head -> x -> temp
x.prev = head;
x.next = temp;
head.next = x;
temp.prev = x;
size++;
}
public void addAtTail(int val) {
Node x = new Node(val);
Node temp = tail.prev;
//temp -> x -> tail
x.prev = temp;
x.next = tail;
temp.next = x;
tail.prev = x;
size++;
}
public void addAtIndex(int index, int val) {
if (index > size) {
return;
}
Node x = new Node(val);
Node p = head.next;
for (int i = 0; i < index; i++) {
p = p.next;
}
Node temp = p.prev;
//temp -> x -> p
x.prev = temp;
x.next = p;
temp.next = x;
p.prev = x;
size++;
}
public void deleteAtIndex(int index) {
if (index < 0 || index >= size) {
return;
}
Node p = head.next;
for (int i = 0; i < index; i++) {
p = p.next;
}
Node prev = p.prev;
Node next = p.next;
prev.next = next;
next.prev = prev;
p.next = p.prev = null;
size--;
}
}
/**
* Your MyLinkedList object will be instantiated and called as such:
* MyLinkedList obj = new MyLinkedList();
* int param_1 = obj.get(index);
* obj.addAtHead(val);
* obj.addAtTail(val);
* obj.addAtIndex(index,val);
* obj.deleteAtIndex(index);
*/
【运行结果】