class MyLinkedList {
int size;
ListNode dummyHead;
public MyLinkedList() {
size = 0;
dummyHead = new ListNode(-1);
}
/**
* 定义一个获取任意索引前一个节点的方法
*/
public ListNode getPrev(int index){
if (index < 0 || index >= size){
return null;
}
ListNode prev = dummyHead;
for (int i = 0; i < index; i++) {
prev = prev.next;
}
return prev;
}
public int get(int index) {
ListNode prev = getPrev(index);
if (prev != null){
return prev.next.val;
}
else {
return -1;
}
}
public void addAtHead(int val) {
addAtIndex(0, val);
}
public void addAtTail(int val) {
addAtIndex(size, val);
}
public void addAtIndex(int index, int val) {
if (index > size){
return;
}
if (index < 0){
index = 0;
}
ListNode prev = dummyHead;
for (int i = 0; i < index; i++) {
prev = prev.next;
}
ListNode temp = new ListNode(val);
temp.next = prev.next;
prev.next = temp;
size++;
}
public void deleteAtIndex(int index) {
ListNode prev = getPrev(index);
if (prev != null && prev.next != null){
prev.next = prev.next.next;
size--;
}
}
}
class ListNode{
int val;
ListNode next;
public ListNode(){}
public ListNode(int val){
this.val = val;
}
}
https://leetcode-cn.com/problems/design-linked-list/