先附题目截图
解题源码
class MyLinkedList {
public:
//定义链表节点结构体
struct LinkedNode
{
int val;
LinkedNode* next;
LinkedNode(int val): val(val),next(nullptr){
}
};
MyLinkedList()
{
dummyhead=new LinkedNode(0);
size=0;
}
int get(int index)
{
if(index>(size-1)||index<0)
{
return -1;
}
LinkedNode* curnode=dummyhead->next;
while(index--)
{
curnode=curnode->next;
}
return curnode->val;
}
//在链表第一个元素前添加一个值为val的节点
void addAtHead(int val)
{
LinkedNode* newnode=new LinkedNode(val);
newnode->next=dummyhead->next;
dummyhead->next=newnode;
size++;
}
//将值为val的节点追加到链表的最后一个元素
void addAtTail(int val)
{
LinkedNode* newnode=new LinkedNode(val);
LinkedNode* curnode=dummyhead;
while(curnode->next!=nullptr)
{
curnode=curnode->next;
}
curnode->next=newnode;
size++;
}
//在链表中的第 index 个节点之前添加值为 val 的节点
void addAtIndex(int index, int val)
{
if(index>size)
{
return ;
}
LinkedNode* newnode=new LinkedNode(val);
LinkedNode* curnode=dummyhead;
while(index--)
{
curnode=curnode->next;
}
newnode->next=curnode->next;
curnode->next=newnode;
size++;
}
//如果索引 index 有效,则删除链表中的第 index 个节点。
void deleteAtIndex(int index)
{
if(index>=size||index<0)
{
return ;
}
LinkedNode* curnode=dummyhead;
while(index--)
{
curnode=curnode->next;
}
curnode->next=curnode->next->next;
size--;
}
private:
int size;
LinkedNode* dummyhead;
};
/**
* 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);
*/
有关addAtIndex的函数的设计:法二
void addAtIndex(int index, int val)
{
if(index>size)
{
return ;
}
if(index==size)
{
LinkedNode* newnode=new LinkedNode(val);
LinkedNode* curnode=dummyhead;
while(curnode->next!=nullptr)
{
curnode=curnode->next;
}
curnode->next=newnode;
size++;
return ;
}
if(index<size)
{
LinkedNode* newnode= new LinkedNode(val);
LinkedNode* curnode= dummyhead;
/*
for(;index>0;index--){
curnode = curnode -> next;
}
*/
while(index--)
{
curnode=curnode->next;
}
newnode->next=curnode->next;
curnode->next=newnode;
size++;
return ;
}
}