原题链接:707. 设计链表
solution:
class MyLinkedList {
public:
struct ListNode {
int val;
ListNode *next; //下一个节点
ListNode(int val):val(val),next(nullptr){}
};
MyLinkedList() {
dummyhead = new ListNode(-1);
_size = 0; //链表初始化
}
int get(int index) {
if(index < 0 || index >= _size) return -1;
ListNode *cur = dummyhead->next;
for(int i = 0;i < index;i++){
cur = cur->next;
}
return cur->val;
}
void addAtHead(int val) {
ListNode *node = new ListNode(val);
node->next = dummyhead->next;
dummyhead->next = node;
_size++;
}
void addAtTail(int val) {
ListNode *node = new ListNode(val);
ListNode *cur = dummyhead;
while(cur->next != nullptr){
cur = cur->next;
}
cur->next = node;
_size++;
}
void addAtIndex(int index, int val) {
if(index > _size || index < 0) return;
ListNode *node = new ListNode(val);
ListNode *cur = dummyhead;
for(int i = 0;i < index;i++){
cur = cur->next;
}
node->next = cur->next;
cur->next = node;
_size++;
}
/** Delete the index-th node in the linked list, if the index is valid. */
void deleteAtIndex(int index) {
if(index < 0 || index >= _size) return;
ListNode *cur = dummyhead;
while(index--){
cur = cur->next;
}
ListNode *node = cur->next;
cur->next = cur->next->next;
delete(node);
_size--;
}
private:
ListNode *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);
*/