题目描述
解题思路
class MyLinkedList {
class ListNode{
int val;
ListNode prev, next;
ListNode(int val){
this.val = val;
}
}
int size;
ListNode head, tail;
public MyLinkedList() {
head = new ListNode(0);
tail = new ListNode(0);
head.next = tail;
tail.prev = head;
size = 0;
}
public int get(int index) {
if(index < 0 || index >= size) return -1;
ListNode cur = head;
if(index < (size - 1) / 2){
for(int i = 0; i <= index; i ++){
cur = cur.next;
}
}else{
cur = tail;
for(int i = 0; i <= size - index - 1; i ++){
cur = cur.prev;
}
}
return cur.val;
}
public void addAtHead(int val) {
ListNode cur = head;
ListNode newNode = new ListNode(val);
newNode.next = cur.next;
cur.next.prev = newNode;
cur.next = newNode;
newNode.prev = cur;
size ++;
}
public void addAtTail(int val) {
ListNode cur = tail;
ListNode newNode = new ListNode(val);
newNode.next = tail;
newNode.prev = cur.prev;
cur.prev.next = newNode;
tail.prev = newNode;
size ++;
}
public void addAtIndex(int index, int val) {
if(index > size) return;
if(index < 0) index = 0;
ListNode cur = head;
for(int i = 0; i < index; i ++){
cur = cur.next;
}
ListNode newNode = new ListNode(val);
newNode.next = cur.next;
cur.next.prev = newNode;
newNode.prev = cur;
cur.next = newNode;
size ++;
}
public void deleteAtIndex(int index) {
if(index >= size || index < 0) return;
ListNode cur = head;
for(int i = 0; i < index; i ++){
cur = cur.next;
}
cur.next.next.prev = cur;
cur.next = cur.next.next;
size --;
}
}