class MyLinkedList {
public:
struct LinkedNode{
int val;
LinkedNode* next;
LinkedNode(int val):val(val),next(nullptr){}
}*head;
MyLinkedList() {
//dummy = new LinkedNode(0);
head = NULL;
}
//查找复杂度为o(n)
int get(int index) {
if(index < 0) return -1;
else
{
auto p = head;
for(int i = 0;i < index && p;i++) p = p->next;
if(!p) return -1;
return p->val;
}
}
void addAtHead(int val) {
auto cur = new LinkedNode(val);
cur->next = head;
head = cur;
}
void addAtTail(int val) {
auto cur = new LinkedNode(val);
if(!head) head = cur;
else
{
auto p = head;
while(p->next) p = p->next;
p->next = cur;
}
}
void addAtIndex(int index, int val) {
auto cur = new LinkedNode(val);
if(index <= 0) addAtHead(val); //得吧等于0算进去啊,不然你咋找头节点前一个数呢?
else{
int len = 0;
for(auto p = head;p;p = p->next) len++;
if(index == len) addAtTail(val);
else if(index <= len)
{
auto p = head;
//在index-1个点后插入一个
for(int i = 0;i < index - 1;i++) p = p->next;
cur->next = p->next;
p->next = cur;
}
}
}
void deleteAtIndex(int index) {
int len = 0;
for(auto p = head;p;p = p->next) len++;
if(index >= 0 && index < len)
{
if(!index) head = head->next; //第一个点不要忘记啊
else{
auto p = head;
for(int i = 0;i < index -1 ;i++) p = p->next;
p->next = p->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);
*/