class MyLinkedList {
public:
struct LinkedList{
int val;
LinkedList * next;
LinkedList(int val) : val(val), next(nullptr) {}
};
MyLinkedList() {
dummyhead = new LinkedList(-1);
size = 0;
}
int get(int index) {
if(index >= size) {
return -1;
}
LinkedList* cur = dummyhead->next;
while(index--) {
cur = cur->next;
}
return cur->val;
}
void addAtHead(int val) {
LinkedList * newnode = new LinkedList(val);
newnode->next = dummyhead->next;
dummyhead->next = newnode;
size++;
}
void addAtTail(int val) {
LinkedList* cur = dummyhead;
LinkedList* newnode = new LinkedList(val);
while(cur->next) {
cur = cur->next;
}
newnode->next = cur->next;
cur->next = newnode;
size++;
}
void addAtIndex(int index, int val) {
if(index > size) {
return;
}
LinkedList* newnode = new LinkedList(val);
LinkedList* cur = dummyhead;
while(index--){
cur = cur->next;
}
newnode->next = cur->next;
cur->next = newnode;
size++;
}
void deleteAtIndex(int index) {
if(index >= size) {
return;
}
LinkedList* cur = dummyhead;
while(index--){
cur = cur->next;
}
LinkedList* tmp = cur->next;
cur->next = tmp->next;
delete tmp;
tmp = nullptr;
size--;
}
private:
LinkedList * dummyhead;
int size;
};
/**
* 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);
*/
10-28
127

04-28
146
