自己设计一个链表,实现简单的增删改查,上代码:
class MyLinkedList {
public static void main(String[] args) {
MyLinkedList myLinkedList = new MyLinkedList();
myLinkedList.addAtHead(7);
myLinkedList.addAtHead(2);
myLinkedList.addAtHead(1);
myLinkedList.addAtIndex(3, 0);
myLinkedList.deleteAtIndex(2);
myLinkedList.addAtHead(6);
myLinkedList.addAtTail(4);
int i = myLinkedList.get(4);
myLinkedList.addAtHead(4);
myLinkedList.addAtIndex(5, 0);
myLinkedList.addAtHead(6);
}
Node begin;
Node end;
int size;
public MyLinkedList() {
begin = null;
end = null;
size = 0;
}
public int get(int index) {
if(index < 0 || index > size - 1){
return -1;
}
if(index == 0){
if(begin == null){
return -1;
}
return begin.val;
}
if(index == size - 1){
return end.val;
}
int i = 1;
Node cur = begin.next;
while(i < index){
i++;
cur = cur.next;
}
if(cur == null){
return -1;
}
return cur.val;
}
public void addAtHead(int val) {
if(begin == null){
begin = new Node(val, null);
end = begin;
}else{
begin = new Node(val, begin);
}
size++;
}
public void addAtTail(int val) {
if(end == null){
end = new Node(val, null);
begin = end;
}else{
end.next = new Node(val, null);
end = end.next;
}
size++;
}
public void addAtIndex(int index, int val) {
if(index < 0 || index > size){
return;
}
if(index == size){
addAtTail(val);
return;
}
if(index == 0){
addAtHead(val);
}else{
int i = 1;
Node cur = begin.next;
Node pre = begin;
while(i < index){
i++;
pre = cur;
cur = cur.next;
}
if(cur == null){
end = new Node(val, null);
pre.next = end;
}else{
Node newNode = new Node(val, cur);
pre.next = newNode;
}
}
size++;
}
public void deleteAtIndex(int index) {
if(index < 0 || index > size - 1){
return;
}
if(index == 0){
if(begin == end){
begin = null;
end = null;
}else{
begin = begin.next;
}
}else{
int i = 1;
Node cur = begin.next;
Node pre = begin;
while(i < index){
i++;
pre = cur;
cur = cur.next;
}
if(cur == null){
pre.next = null;
end = pre;
}else{
pre.next = cur.next;
if(pre.next == null){
end = pre;
}
}
}
size--;
}
public class Node{
int val;
Node next;
public Node(int val, Node next){
this.val = val;
this.next = next;
}
}
}
/**
* Your MyLinkedList object will be instantiated and called as such:
* MyLinkedList obj = new MyLinkedList();
* int param_1 = obj.get(index);
* obj.addAtHead(val);
* obj.addAtTail(val);
* obj.addAtIndex(index,val);
* obj.deleteAtIndex(index);
*/```