- 思路
该题目考察对链表的理解,添加一个头节点会使得操作更为方便。
- 代码
class MyLinkedList {
private:
int size;
ListNode *head;
public:
MyLinkedList() {
head = new ListNode(0);//创建头节点
size = 0;
}
int get(int index) {
if(index<0||index>size-1) return -1;//超出范围
ListNode* p = head;
for(int i=0;i<=index;i++){
p=p->next;
}
return p->val;
}
void addAtHead(int val) { //头插法
ListNode* p=new ListNode(val);
p->next=head->next;
head->next=p;
size++; //链表长度要加1
}
void addAtTail(int val) { //尾插法
ListNode* p = head;
while(p->next){//到达末尾
p=p->next;
}
ListNode* q=new ListNode(val);
q->next=nullptr;
p->next=q;
size++;
}
void addAtIndex(int index, int val) {
if(index<0||index>size) return;
ListNode* p = head;
for(int i=0;i<index;i++){
p=p->next;
}
ListNode* q=new ListNode(val);
q->next=p->next;
p->next=q;
size++;
}
void deleteAtIndex(int index) {
if(index < 0 || index > size-1) return;
ListNode* q=head;
for(int i=0;i<index;i++){
q=q->next;
}
q->next=q->next->next;
size--;
}
};