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

做淘宝客网站要申请什么在线制作网页网站

做淘宝客网站要申请什么,在线制作网页网站,外包加工网官网下载,html怎么做网站背景目录 前言1.移除元素1.1 链表1.2 数组 2.双指针2.1 找链表的中间结点2.2 找倒数第k个结点 总结 前言 解代码题 先整体:首先数据结构链表的题一定要多画图,捋清问题的解决思路; 后局部:接着考虑每一步具体如何实现,框架…

目录

  • 前言
  • 1.移除元素
    • 1.1 链表
    • 1.2 数组
  • 2.双指针
    • 2.1 找链表的中间结点
    • 2.2 找倒数第k个结点
  • 总结

前言

解代码题
先整体:首先数据结构链表的题一定要多画图,捋清问题的解决思路;
后局部:接着考虑每一步具体如何实现,框架搭好后,处理坑点,考虑细枝末节,通常要考虑以下几个容易出错的点

  1. 需要单独处理的头结点、尾结点
  2. 越界问题
  3. 头指针为NULL
  4. 循环继续、结束条件等

而思路这一块,有的思路好想,但是无论从时间复杂度还是空间复杂度上来看,可能不是优良的算法。但有一些比较清奇的思路,见得题多了,反思总结,也就收入囊中啦!比如下面介绍的双指针,以及翻转数组的思路都很优秀。

每个小节开头蓝色字体是题目链接,大家可以先做一下题~


1.移除元素

1.1 链表

203.移除链表元素(题目链接)
在这里插入图片描述
思路1:遍历链表,删除数据域为val的结点;
思路2:将值不为val的节点尾插到新的链表中,返回新链表的头结点(头指针)。

注意:两种思路整体都是遍历原链表,但是有几个坑!

  • 坑点1:如果尾插第一个结点,要更改新的头指针newhead;但后续插入不需要再更改头指针。
  • 坑点2:如果最后一个结点的值不是val,那么将其尾插到新链表,其next指针域为NULL;但是如果最后一个结点的值是val,其前一个结点(假设prev指向该结点)被尾插到新链表,prev->next指向的最后一个节点(数据域为val)被free,那么prev->next是野指针,所以要将其置为NULL.

比如下图中当数据域为5的结点被尾插到新链表之后,tail指向该节点,tail->next=p,但是free§之后,p就是野指针了,应将tail->next手动置为NULL.
在这里插入图片描述

  • 坑点3:第二点和链表本身为空可以合在一起考虑,如果head为NULL,那么cur为NULL,遍历原链表的while循环不会执行,tail为NULL,newhead为NULL,直接返回即可;而如果tail不为NULL,tail->next有可能为NULL,不考虑太多,直接置为NULL.
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/ 
struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* cur=head, *newhead=NULL, *tail=NULL;//cur用于遍历要删除的链表//newhead用于存放要新链表的头指针,用于返回//tail用于尾插,否则每次尾插都要遍历新链表找尾节点,效率不高while(cur)//while循环遍历要删除的链表{//结点数据域为val与非val分开处理,val则删除,非val则尾插到新链表if(cur->val!=val){//插入第一个元素和后续元素不同的是,插入第一个元素需要更改头指针,要单独处理//坑点1 if(tail==NULL)newhead=tail=cur;else{tail->next=cur;tail=tail->next;}cur=cur->next;}else{struct ListNode* next=cur->next;free(cur);cur=next;}}//坑点2,3if(tail)tail->next=NULL;return newhead;
}

1.2 数组

27.移除元素(题目链接)
在这里插入图片描述
这个题的思路可以是,创建一个新的数组存储值不为val的数组元素。
也可以使用双指针,数组的指针就是下标,使用src指针遍历数组,如果值不为val,就将其赋值到nums[dst++].

int removeElement(int* nums, int numsSize, int val) {int src=0,dst=0;while(src<numsSize){if(nums[src]!=val)nums[dst++]=nums[src++];//只有当值非val的时候,存储到数组中,以dst为指针,也就是舍弃值为val的元素elsesrc++;//每次循环src都++,达到遍历数组的目的}return dst;
}

2.双指针

2.1 找链表的中间结点

876.链表的中间结点(题目链接)
在这里插入图片描述
考虑快慢指针,fast, slow指针刚开始均指向第一个结点,接着fast每次走两步,slow每次走一步;如果是奇数结点,fast->next为NULL时,slow指向中间结点;如果是偶数结点,fast为NULL时,slow指向两个中间结点的第二个结点。也即fast遍历链表,当fast为NULL或fast->next为NULL时停止循环,返回slow.
在这里插入图片描述

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* middleNode(struct ListNode* head) {struct ListNode* fast=head,*slow=head;while(fast && fast->next){fast=fast->next->next;slow=slow->next;}return slow;
}

这个思路和下面这道题有点像!

2.2 找倒数第k个结点

02.返回倒数第k个节点(题目链接)
在这里插入图片描述
思路:考虑双指针,fast走到NULL终止循环,那么此时fast相当于倒数第0个结点,slow是倒数第k个结点,也即fast比slow多走了k步,那么让fast先走k步,接着fast和slow同步往前走,直到fast为NULL.
代码如下
(如果fast走到最后一个节点停止,那么考虑fast先走k-1步)

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
int kthToLast(struct ListNode* head, int k){struct ListNode* fast=head,*slow=head;while(k--){if(fast==NULL)return NULL;//考虑链表本身为空的情况fast=fast->next;}while(fast){fast=fast->next;slow=slow->next;}return slow->val;
}

总结

链表代码题考虑时间复杂度、空间复杂度,同时要多见题,多见经典题,多练,总结经典思路,以及常见坑点,写代码时考虑细枝末节。细节考虑不到位,可能存在提交不通过,对未通过测试用例的提示进行分析,调试,提升自身解决问题的能力。

http://www.hkea.cn/news/469875/

相关文章:

  • 网站建设全攻略站长之家ping检测
  • 导航网站 cmsgoogle chrome谷歌浏览器
  • wordpress看其他人博客优化师是做什么的
  • 现在哪个网站还做白拿2021小说排行榜百度风云榜
  • 网站流量seo提升seo排名的方法
  • 做html网站模板下载地址网站页面布局和样式设计
  • 公司网站邮箱费用磁力宅在线搜种子
  • wordpress 缺少临时文件夹刷关键词优化排名
  • 做网站要有什么团队淘宝关键词排名查询工具
  • 开源门户网站源码宁波谷歌seo
  • wordpress+一页一屏seo关键技术有哪些
  • 学校校园网站建设实施方案精准营销的案例
  • 腾讯云服务器可以做网站可以推广发广告的app
  • seo外链友情链接网站运营推广选择乐云seo
  • 做网站 要学 什么语言网站优化公司
  • 天乐测绘网做网站吗搜索引擎广告图片
  • 湖南营销型网站建设多少钱百度关键词优化软件网站
  • 怎样给网站做关键词优化百度词条
  • 做网站哪个平台搭建网站需要什么技术
  • 做gif图的网站简述网络营销的主要方法
  • 做图网站被告seo视频网页入口网站推广
  • 做的网站底部应该标注什么意思免费文案素材网站
  • 企业网站搜索引擎拓客农夫山泉软文300字
  • 青岛黄岛区网站开发武汉seo优化
  • 东莞做网站企业铭会员制营销
  • 做网站设计工资多少钱优化教程网官网
  • 计算机网站建设与维护百度关键词统计
  • wordpress网站实现微信登录google google
  • 网站建设 零基础网站关键词如何优化
  • 如何撤销网站上信息app网站