(leetcode.707)
题目要求
思路
1.一个节点类ListNode
存储节点信息(value、next)
一个操作类MyLinkedList
操作节点(增删查)
2.每次循环后,找到index索引的前驱节点。
代码
class ListNode {
int val;
ListNode next;
public ListNode() {}
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
class MyLinkedList {
ListNode head;//虚拟头节点
int size;//节点数量
public MyLinkedList() {
size = 0;
head = new ListNode(0, null);
}
public int get(int index) {
if(size == 0 || index > size - 1 || index < 0) return -1;//索引无效
ListNode temp = head;
for(int i = -1; i < index; i ++) {
temp = temp.next;
}
return temp.val;
}
public void addAtHead(int val) {
ListNode temp = head.next;
head.next = new ListNode(val, temp);
size ++;
}
public void addAtTail(int val) {
ListNode temp = head;
for(int i = 0; i < size; i ++) {
temp = temp.next;
}//此时temp为前驱节点
temp.next = new ListNode(val, null);
size ++;
}
public void addAtIndex(int index, int val) {
if(index > size) return;
ListNode temp = head;
for(int i = 0; i < index; i ++) {
temp = temp.next;
}
ListNode link = temp.next;
temp.next = new ListNode(val, link);
size ++;
}
public void deleteAtIndex(int index) {
if(size == 0 || index > size - 1 || index < 0) return;
ListNode temp = head;
for(int i = 0; i < index; i ++) {
temp = temp.next;
}
temp.next = temp.next.next;
size --;
}
}