设计链表
carl整理 :设计链表
703.设计链表
class MyLinkedList {
public:
/** Initialize your data structure here. */
//头节点不存东西,index从0开始
struct ListNode {
int val;
ListNode* next;
ListNode(int val):val(val), next(nullptr){}
};
MyLinkedList() {
newhead = new ListNode(0);
size = 0;
}
//返回链表中第index个的值,无效值return -1.
int get(int index) {
if(index <0 || index > (size-1)){
return -1;
}
ListNode *headnext = newhead ->next;
while(index--){
headnext = headnext -> next;
}
return headnext -> val;
}
//头插法插入val
void addAtHead(int val) {
ListNode* cur = new ListNode (val);
cur -> next = newhead -> next;
newhead -> next = cur;
size++;
}
//尾插法插入插入val
void addAtTail(int val) {
ListNode* temp = new ListNode (val);
ListNode* cur = newhead;
while(cur->next != nullptr){
cur = cur -> next;
}
cur -> next = temp;
size++;
}
//将第index个插入val
void addAtIndex(int index, int val) {
if(index > size){
return;
}
ListNode* newNode = new ListNode(val);
ListNode* cur = newhead;
while(index--){
cur = cur -> next;
}
newNode -> next = cur-> next;
cur -> next = newNode;
size++;
}
//删除第index个
void deleteAtIndex(int index) {
if (index >= size || index < 0) {
return;
}
ListNode* cur = newhead;
while(index--) {
cur = cur -> next;
}
ListNode* tmp = cur-> next;
cur-> next = cur-> next-> next;
delete tmp;
size--;
}
private:
int size;
ListNode* newhead;
};
/**
* 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);
*/