这道题看起来简单,一做百分之0,我太菜啊啊啊啊
总结几个注意点:
1.题目中的index说的都是索引,是从0开始的
2.记得判断index的合法性!!!
3.新增节点时就得让size加一,删除记得减一!
兄弟姐妹们自求多福趴,希望大家一遍过
public class MyLinkedList {
public int size;
public ListNode dummyHead = new ListNode();
public MyLinkedList() {
// this.size = 0;
// this.dummyHead = new MyLinkedList();
}
/*获取索引index处的节点值*/
public int get(int index) {
//***1.是谁没有判断index合法性
if(index < 0 || index >= size){
return -1;
}
//2.找索引为Index的节点
ListNode cur = dummyHead;
//***注:I=0时,索引为1;因此i=index时,索引才是Index。注意循环条件。
for(int i = 0; i <= index; i++){
cur = cur.next;
}
return cur.val;
}
/*在头部添加节点*/
/*思路:
* 1.创建一个节点,节点值为val
* 2.该节点指向实际头结点
* 3.虚拟头节点指向该节点*/
public void addAtHead(int val) {
ListNode head = new ListNode(val);
head.next = dummyHead.next;
dummyHead.next = head;
size++;
}
/*
* 思路;
* 1.找到最后一个节点
* 2.最后一个节点指向新节点*/
public void addAtTail(int val) {
ListNode tail = new ListNode(val,null);
ListNode cur = dummyHead;
while (cur.next != null){
cur = cur.next;
}
cur.next = tail;
size++;
}
/*
* 思路:
* 0.判断Index合法性
* 1.找到索引为Index-1的节点
* 2.在该节点后边添加新节点*/
public void addAtIndex(int index, int val) {
if(index >= 0 && index <= size){
ListNode node = new ListNode(val);
ListNode cur = dummyHead;
for(int i = 0; i < index; i++){
cur = cur.next;
}
node.next = cur.next;
cur.next = node;
size++;
}
}
public void deleteAtIndex(int index) {
if(index >= 0 && index < size){
ListNode cur = dummyHead;
for(int i = 0; i < index; i++){
cur = cur.next;
}
cur.next = cur.next.next;
size--;
}
}
}