//结点类
class ListNode{
int val;
ListNode next;
public ListNode(int val){
this.val = val;
}
}
//我的链表
class MyLinkedList{
int size;
ListNode head;
public MyLinkedList(){
size = 0;
head = new ListNode(0);
}
public int get(int index){
ListNode currentNode = head;
if(index < 0 || index >=size){
return -1;
}
for(int i = 0;i<index+1;i++){
currentNode = currentNode.next;
}
return currentNode.val;
}
public void addAtIndex(int index,int val) {
//我要排除出去的就是这两个情况。
if(index > size){
return;
}
if(index < 0){
index = 0;
}
//这句话是废话
if(index == size){
index = size;
}
//下面这段代码是可以把末尾的结点插入的。
size++;
ListNode pre = head;
ListNode toAdd = new ListNode(val);
for (int i = 0; i < index; i++) {
pre = pre.next;
}
toAdd.next = pre.next;
pre.next = toAdd;
}
public void deleteAtIndex(int index){
if(index < 0 || index >= size){
return;
}
ListNode pre = head;
size--;
for(int i = 0;i < index ;i++){
pre = pre.next;
}
pre.next = pre.next.next;
}
public void addAtHead(int val){
addAtIndex(0,val);
}
public void addAtTail(int val){
addAtIndex(size,val);
}
}
//index是指的链表中结点的索引。从0开始
//链表中的虚拟头结点不算size数
//从虚拟头结点走到链表中的第5个结点,需要走5步
//定义结点类的时候,由于next指向的是下一个结点对象,所以初始化结点的时候,不需要对next进行初始化。