707. 设计链表
涉及链表的增删改查
代码/思路
class MyLinkedList {
struct Node {
int val;
Node *next;
Node(){next = NULL;}
Node(int v): val(v), next(NULL){}
};
Node *dummyHead;
public:
MyLinkedList() {
dummyHead = new Node();
}
int get(int index) {
Node *now = dummyHead;
for(int i = 0; i <= index; i++)
{
now = now -> next;
if(now == NULL)
{
return -1;
}
}
return now->val;
}
void addAtHead(int val) {
Node *p = new Node(val);
Node *dnext = dummyHead -> next;
dummyHead->next = p;
p->next = dnext;
}
void addAtTail(int val) {
Node *p = new Node(val);
Node * now = dummyHead;
while(now-> next)
{
now = now->next;
}
now->next = p;
}
void addAtIndex(int index, int val) {
Node *p = new Node(val);
Node *now = dummyHead;
if(index < 0)
{
addAtHead(val);
return;
}
for(int i = 0; i < index; i++)
{
now = now->next;
if(now == NULL)
{
return;
}
}
Node *nnext = now->next;
now->next = p;
p->next = nnext;
}
void deleteAtIndex(int index) {
if(get(index) == -1)
{
return;
}
Node *now = dummyHead;
for(int i = 0; i < index; i++)
{
now = now->next;
}
now->next = now->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);
*/