AC代码
class MyLinkedList {
private int size;
private node sentinel;
public MyLinkedList() {
this.size = 0;
this.sentinel = new node();
this.sentinel.setPre(sentinel);
this.sentinel.setNext(sentinel);
}
public int get(int index) {
int ret = -1;
if (index >= 0 && index < size) {
node temp = sentinel.getNext();
while (temp != null && index-- > 0) {
temp = temp.getNext();
}
if (temp != null) {
ret = temp.getVal();
}
}
return ret;
}
public void addAtHead(int val) {
sentinel.setNext(new node(val, sentinel, sentinel.getNext()));
if (sentinel.getNext().getNext() != null) {
sentinel.getNext().getNext().setPre(sentinel.getNext());
}
size++;
}
public void addAtTail(int val) {
sentinel.setPre(new node(val, sentinel.getPre(), sentinel));
if (sentinel.getPre().getPre() != null) {
sentinel.getPre().getPre().setNext(sentinel.getPre());
}
size++;
}
public void addAtIndex(int index, int val) {
if (index >= 0 && index <= size) {
node temp = sentinel.getNext();
while (temp != null && index-- > 0) {
temp = temp.getNext();
}
if (temp != null) {
temp.getPre().setNext(new node(val, temp.getPre(), temp));
temp.setPre(temp.getPre().getNext());
} else {
sentinel.setPre(new node(val, sentinel.getPre(), sentinel));
sentinel.getPre().getPre().setNext(sentinel.getPre());
}
size++;
}
}
public void deleteAtIndex(int index) {
if (index >= 0 && index < size) {
node temp = sentinel.getNext();
while (temp != null && index-- > 0) {
temp = temp.getNext();
}
if (temp != null) {
if (temp.getNext() != null) {
temp.getNext().setPre(temp.getPre());
}
temp.getPre().setNext(temp.getNext());
}
size--;
}
}
}
class node {
private int val;
private node pre;
private node next;
public node() {
}
public node(int val, node pre, node next) {
this.val = val;
this.pre = pre;
this.next = next;
}
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
public node getPre() {
return pre;
}
public void setPre(node pre) {
this.pre = pre;
}
public node getNext() {
return next;
}
public void setNext(node next) {
this.next = next;
}
}