当前位置: 首页 > news >正文

707. 设计链表(力扣刷题)(C语言题解)

个人博客主页:https://blog.csdn.net/2301_79293429?type=blog
专栏:https://blog.csdn.net/2301_79293429/category_12545690.html

题目链接:

707. 设计链表 - 力扣(LeetCode)

该题为中等题,包括了对链表的大部分常用操作,更改真的很烦,因为它很长,链表题目也不方便调试,不知道哪里有问题,你只有一点一点的对比代码才找得到错哪

AC代码:

/*一定要建立虚拟头节点,方便的多--->统一操作,避免每次都要将头节点单独讨论*/typedef int VALTYPE;/*方便更改数据类型*//*链表的基本创建*/
typedef struct MyLinkedList {VALTYPE val;struct MyLinkedList* next;
}MyLinkedList;MyLinkedList* myLinkedListCreate() 
{MyLinkedList* head=(MyLinkedList*)malloc(sizeof(MyLinkedList));head->val=0;head->next=NULL;return head;
}int myLinkedListGet(MyLinkedList* obj, int index) 
{/*这里的obj是我们创建的虚拟头节点,所以要令p=obj->next*/MyLinkedList* p=obj->next;/*只是创建了一个指针变量,不需要动态开辟一块空间*/int i;for(i=0;p!=NULL;i++){if(i==index)return p->val;if(p->next==NULL)return -1;p=p->next;}return -1;
}void myLinkedListAddAtHead(MyLinkedList* obj, int val) 
{MyLinkedList* p1=(MyLinkedList*)malloc(sizeof(MyLinkedList));/*创建了一个结构体,需要动态开辟一块空间*/p1->val=val;p1->next=obj->next;/*注意顺序,要先将新节点的next指向obj的next,再更新obj的next*/obj->next=p1;
}void myLinkedListAddAtTail(MyLinkedList* obj, int val) 
{/*正确写法*/MyLinkedList* p=obj;/*不是obj->next了,因为也要对头节点进行判断是否为null*/for(int i=0;p->next!=NULL;i++){           /**/p=p->next;}MyLinkedList* p1=(MyLinkedList*)malloc(sizeof(MyLinkedList));p1->next=NULL;p1->val=val;p->next=p1;
}void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) 
{if (index == 0) /**/{myLinkedListAddAtHead(obj, val);return;}MyLinkedList* p=obj->next;for(int i=1;p!=NULL;i++){/*要从1开始,0要特殊处理*/if(i==index){/*要等于index*/MyLinkedList* p2=(MyLinkedList*)malloc(sizeof(MyLinkedList));p2->val=val;p2->next=p->next;p->next=p2;return;/*直接return*/}p=p->next;}void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) 
{MyLinkedList* p=obj;for(int i=-1;p!=NULL&&p->next!=NULL;i++){if(i==index-1){MyLinkedList* temp=p->next;p->next=p->next->next;free(temp);break;}p=p->next;}
}void myLinkedListFree(MyLinkedList* obj) 
{struct MyLinkedList*p=obj->next;for(int i=0;p!=NULL;i++){struct MyLinkedList*temp=p;p=p->next;free(temp);}
}/*** Your MyLinkedList struct will be instantiated and called as such:* MyLinkedList* obj = myLinkedListCreate();* int param_1 = myLinkedListGet(obj, index);* myLinkedListAddAtHead(obj, val);* myLinkedListAddAtTail(obj, val);* myLinkedListAddAtIndex(obj, index, val);* myLinkedListDeleteAtIndex(obj, index);* myLinkedListFree(obj);
*/

最后祝大家题题AC,只盼做个WA梦 ~

相关文章:

  • ARM-M0 + 24bit ADC,采样率8KSPS,高精度ADC使用手册
  • [GN] DP学习笔记板子
  • Next.js如何正确处理跨域问题?
  • 网络ADB连接(不用实体安卓线)
  • 每日一练:LeeCode-404、左叶子之和【二叉树】
  • IDEA:git 回滚本地提交-git 选择 Reset Current Branch to
  • 《区块链简易速速上手小册》第4章:区块链与加密货币(2024 最新版)
  • Vue2:请求接口的两种方式axios和vue-resource
  • 大模型重塑车载语音交互:赛道巨头如何引领新周期?
  • 力扣0114——二叉树展开为链表
  • Python爬虫请求库安装
  • Spring Cloud使用笔记
  • 判断一个字符串中出现次数最多的字符,统计这个次数?
  • C++——特殊类
  • Flink 添加 / 部署 Jar 包的若干注意事项
  • 时间复杂度分析经典问题——最大子序列和
  • 【刷算法】求1+2+3+...+n
  • Angular2开发踩坑系列-生产环境编译
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Java多线程(4):使用线程池执行定时任务
  • Selenium实战教程系列(二)---元素定位
  • tab.js分享及浏览器兼容性问题汇总
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 读懂package.json -- 依赖管理
  • 关于 Cirru Editor 存储格式
  • 利用jquery编写加法运算验证码
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​ubuntu下安装kvm虚拟机
  • ​学习一下,什么是预包装食品?​
  • #FPGA(基础知识)
  • #数据结构 笔记三
  • $().each和$.each的区别
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (02)vite环境变量配置
  • (12)Linux 常见的三种进程状态
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C语言)二分查找 超详细
  • (MATLAB)第五章-矩阵运算
  • (超详细)语音信号处理之特征提取
  • (转)四层和七层负载均衡的区别
  • (转)为C# Windows服务添加安装程序
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .apk 成为历史!
  • .cn根服务器被攻击之后
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Micro Framework初体验
  • .NET Standard 的管理策略