当前位置:网站首页>力扣刷题记录7.1-----707. 设计链表
力扣刷题记录7.1-----707. 设计链表
2022-08-09 01:51:00 【@白圭】
一、题目
二、代码
/** * 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); */
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>=0&&index<=_size-1)
{
//std::cout<<"in get _size "<<_size<<" "<< std::endl;
LinkedNode *process_node;
process_node=_dummyhead; //构造处理节点
int count_index=0;
while(count_index!=index)
{
process_node=process_node->next;
count_index=count_index+1;
}
// LinkedNode *show_node;
// show_node=_dummyhead; //构造处理节点
// while(show_node->next!=nullptr)
// {
// std::cout<<" "<<show_node->val<<" ";
// show_node=show_node->next;
// }
// std::cout<<" "<<show_node->val<<" "; //打印最后一个
// std::cout<<" "<< std::endl;
// std::cout<<"_size "<<_size<<" "<< std::endl;
return process_node->next->val;
}
else
{
return -1;
}
}
void addAtHead(int val) //在链表头追加元素
{
LinkedNode *temp;
temp=new LinkedNode(val); //构造该节点
temp->next=_dummyhead->next;
_dummyhead->next=temp;
_size+=1;
}
void addAtTail(int val) //在链表末尾追加元素
{
// LinkedNode *show_node;
// show_node=_dummyhead; //构造显示节点
// while(show_node->next!=nullptr)
// {
// std::cout<<" "<<show_node->val<<" ";
// show_node=show_node->next;
// }
// std::cout<<" "<<show_node->val<<" "; //打印最后一个
// std::cout<<" "<< std::endl;
// std::cout<<"in tail _size "<<_size<<" "<< std::endl;
LinkedNode *temp;
temp=new LinkedNode(val); //构造该节点
LinkedNode *process_node;
process_node=_dummyhead; //构造处理节点
while(process_node->next!=nullptr) //先自增 一直增加到尾结点 那么这时候跳出while
{
process_node=process_node->next;
}
process_node->next=temp; //将其尾节点设置成为temp 而temp本身指向nullptr 不用操作
_size+=1; //大小加1
// show_node=_dummyhead; //构造显示节点
// while(show_node->next!=nullptr)
// {
// std::cout<<" "<<show_node->val<<" ";
// show_node=show_node->next;
// }
// std::cout<<" "<<show_node->val<<" "; //打印最后一个
// std::cout<<" "<< std::endl;
// std::cout<<"out tail _size "<<_size<<" "<< std::endl;
}
void addAtIndex(int index, int val) //注意 操作之后_size会变大 应该让操作互斥
{
int one_operation=0;
std::cout<<"in addAtIndex _size "<<_size<<" "<< std::endl;
LinkedNode *process_node;
process_node=_dummyhead; //构造处理节点
LinkedNode *temp;
temp=new LinkedNode(val); //构造该节点
if(index<0&&one_operation==0) //如果索引值小于0
{
addAtHead(val);
one_operation=1;
}
if(index==_size&&one_operation==0) //如果index等于链表长度 就加在末尾
{
addAtTail(val);
one_operation=1;
}
if(index>_size&&one_operation==0) //如果index大于链表长度 就不插入
{
//no operation
one_operation=1;
}
std::cout<<"in addAtIndex _size "<<_size<<" "<< std::endl;
if(index>=0&&index<_size&&one_operation==0)
{
if(index==0) addAtHead(val);
else
{
int count_index=0;
while(count_index!=index) //如果index等于1 就是在第一个之前插入 也就是第0个之后插入 找到第0个就可以了
{
process_node=process_node->next;
count_index=count_index+1;
}
temp->next=process_node->next;
process_node->next=temp;
_size+=1; //大小加1
}
one_operation=1;
}
std::cout<<"out addAtIndex _size "<<_size<<" "<< std::endl;
}
void deleteAtIndex(int index)
{
if(index<=_size-1&&index>=0)
{
LinkedNode *process_node;
process_node=_dummyhead; //构造处理节点
LinkedNode *temp;
temp=new LinkedNode(0); //构造该节点
int count_index=0;
while(count_index!=index)
{
process_node=process_node->next;
count_index=count_index+1;
}
temp=process_node->next;
process_node->next=process_node->next->next;
delete temp;
_size-=1;
}
}
//私有变量不要忘了定义
private:
int _size;
LinkedNode* _dummyhead;
};
三、运行结果
边栏推荐
猜你喜欢
全文翻译:EDPB数据保护影响评估(DPIA:Data Protection Impact Assessment)指南
Proe/Creo智能硬件产品结构设计要点「干货分享」
2022 PMP Project Management Certification Exam Registration Guide (1)
ICMP差错报告报文数据字段
Loadrunner结合Fiddler实现脚本的录制
Qt中QFile、QByteArray QDataStream和QTextStream区别
Using ngrok on Raspberry Pi (Extra 2)
ffplay播放控制
PostMan导入证书 添加证书
typescript89-展示任务列表功能
随机推荐
LeetCode每日两题02:轮转数组 (均1200道)
JDBC technology (2) - set up common sql and configuration files
Loadrunner结合Fiddler实现脚本的录制
Proe/Creo智能硬件产品结构设计要点「干货分享」
VOIP使用单端口替换动态端口池进行UDP通信
[机缘参悟-65]:《兵者,诡道也》-6-孙子兵法解读-并战计
RS&FSW测试脚本
知识图谱学习笔记——我的第一次知识图谱实践
JDBC technology (1) - a simple JDBC test
【物理应用】基于El-centro地震波作用下隔震与非隔震支座下的顶层位移、速度、加速度的对比情况附matlab代码
Latex example reference
网络安全基础-基本dos命令(一)
字节输入流(InputStream)与字节输出流(OutputStream)
多语种翻译-免费多语种翻译软件
jetson nano 开机闪一下然后黑屏
seaborn 笔记: 绘制分类数据
生成一系列随机字符串的文件
2022PMP项目管理认证考试报考指南(1)
方法参数
d初化模板构造器