Leetcode707
1.问题描述
2.解决方案
注意点:
1.链表节点下标都是第0,1,2…个节点
2.链表设计的时候使用了哨兵节点和成员变量size
3.除此之外就是一些边界条件,什么index==size怎么插怎么删,注释都写得很清楚,这个没什么!
代码实现点:
1.单行实现插入操作
void addAtHead(int val) {
head->next=new ListNode(val,head->next);
this->size++;
}
2.寻找第index个节点,当然这是确保了index>=0&&index<=size-1的情况下的,否则需要加上t!=nullptr
while(index!=0){
t=t->next;
index--;
}
return t->val;
整体代码:
class MyLinkedList {
private:
ListNode* head;
int size;
public:
MyLinkedList() {
size=0;
this->head=new ListNode(-1);
}
int get(int index) {
if(index>this->size-1||index<0) return -1;
ListNode* t=this->head->next;
while(index!=0){
t=t->next;
index--;
}
return t->val;
}
void addAtHead(int val) {
head->next=new ListNode(val,head->next);
this->size++;
}
void addAtTail(int val) {
ListNode* t1=head;
ListNode* t2=head->next;
while (t2!= nullptr){
t1=t2;
t2=t2->next;
}
t1->next=new ListNode(val);
this->size++;
}
//如果index<=0,那就是插入节点为头节点
//如果index==size,则说明是新插入的节点为链表的尾结点
//如果index>size,返回空
void addAtIndex(int index, int val) {
if(index>size) return;
if(index<=0) {head->next=new ListNode(val,head->next); this->size++; return;}
if(index==size) {this->addAtTail(val); return;}
//if(index>0&&index<=size-1)
ListNode* t1=this->head;
ListNode* t2=this->head->next;
while(index!=0){
t1=t2;
t2=t2->next;
index--;
}
t1->next=new ListNode(val,t2);
this->size++;
}
//删除第index个节点,如果index>=size,直接return,注意index是从0开始的
void deleteAtIndex(int index) {
if(index>=size||index<0) return;
//if(index>=0&&index<=size-1)
ListNode* t1=this->head;
ListNode* t2=this->head->next;
while(index!=0){
t1=t2;
t2=t2->next;
index--;
}
t1->next=t2->next;
delete t2;
this->size--;
}
};