涉及到链表的增删查,头插法尾插法和指定位置插入,删除指定位置,和得到指定位置的值。
class MyLinkedList {
public:
struct LinkedList{
int val;
LinkedList* next;
LinkedList(int val):val(val),next(nullptr){}
};
MyLinkedList() {
dummyhead = new LinkedList(0);
size = 0;
}
int get(int index) {
if(index > (size - 1)) return -1;
LinkedList* cur = dummyhead->next;
for(int i = 0;i < index;i ++)
{
cur = cur->next;
}
return cur->val;
}
void addAtHead(int val) {
LinkedList* cur = new LinkedList(val);
cur->next = dummyhead->next;
dummyhead->next = cur;
size ++;
}
void addAtTail(int val) {
LinkedList* newNode = new LinkedList(val);
LinkedList* cur = dummyhead;
while(cur->next != nullptr)
{
cur = cur->next;
}
cur->next = newNode;
size ++;
}
void addAtIndex(int index, int val) {
if(index > size) return;
LinkedList* newNode = new LinkedList(val);
LinkedList*cur = dummyhead;
for(int i = 0;i < index;i ++)
{
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 = cur->next->next;
delete(tmp);
size --;
}
private:
int size;
LinkedList* dummyhead;
};
/**
* 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);
*/