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

来安县城乡建设网站网站建设讲师招聘

来安县城乡建设网站,网站建设讲师招聘,申请注册电子邮箱,厦门功夫广告设计网站建设工作室一、反转链表 给你单链表的头节点 head #xff0c;请你反转链表#xff0c;并返回反转后的链表。 力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台 思路一#xff1a;翻转单链表指针方向 这里解释一下三个指针的作用#xff1a; n1#xff1… 一、反转链表 给你单链表的头节点 head 请你反转链表并返回反转后的链表。 力扣LeetCode官网 - 全球极客挚爱的技术成长平台 思路一翻转单链表指针方向 这里解释一下三个指针的作用 n1记录上一个节点如果是第一个就指向空 n2记录此节点的位置 n3记录下一个节点的位置让翻转后能找到下一个节点防止丢失指针的地址 /** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* reverseList(struct ListNode* head) {if(head NULL){return NULL;}//初始条件struct ListNode* n1 NULL,*n2 head,*n3 n2-next;//结束条件while(n2){//迭代过程n2-next n1;n1 n2;n2 n3;if(n3)n3 n3-next;}return n1; } 思路二:头插法 取原链表节点头插到新链表 /** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* reverseList(struct ListNode* head) {struct ListNode* cur head;struct ListNode* newHead NULL;while(cur){struct ListNode* next cur-next;//头插cur-next newHead;newHead cur;cur next;}return newHead; } 二、链表的中间结点 给你单链表的头结点 head 请你找出并返回链表的中间结点。 如果有两个中间结点则返回第二个中间结点。 力扣LeetCode官网 - 全球极客挚爱的技术成长平台 思路一单指针法 时间复杂度O(N*1.5)其中 N 是给定链表的结点数目。 空间复杂度O(1)只需要常数空间存放变量和指针。 我们可以对链表进行两次遍历。第一次遍历时我们统计链表中的元素个数 N第二次遍历时我们遍历到第 N/2 个元素链表的首节点为第 0 个元素时将该元素返回即可。 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* middleNode(struct ListNode* head) {int n 0;struct ListNode*cur head;while(cur ! NULL){n;cur cur-next;}int k 0;cur head;while(k n/2){k;cur cur-next;}return cur; } 思路二快慢指针法 时间复杂度O(N)其中 N 是给定链表的结点数目。 空间复杂度O(1)只需要常数空间存放 slow 和 fast 两个指针。 我们可以优化思路一用两个指针 slow 与 fast 一起遍历链表。slow 一次走一步fast 一次走两步。那么当 fast 到达链表的末尾时slow 必然位于中间。 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* middleNode(struct ListNode* head) {struct ListNode* slow head,*fast head;while(fast fast-next){slow slow-next;fast fast-next-next;}return slow; } 三、合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  力扣LeetCode官网 - 全球极客挚爱的技术成长平台 思路一迭代法: 定义一个头指针和一个尾指针从小到大依次尾插直到一个链表为空时结束 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {if(l1 NULL) return l2;if(l2 NULL)return l1;struct ListNode* head NULL, *tail NULL;while(l1 ! NULL l2 ! NULL){if(l1-val l2-val){//尾插if(tail NULL){head tail l1;}else{tail-next l1;tail tail-next;}l1 l1-next;}else{if(tail NULL){head tail l2;}else{tail-next l2;tail tail-next;}l2 l2-next;}}if(l1)tail-next l1;if(l2)tail-next l2;return head; } 优化一: 先确定头结点然后再循环判断val大小尾插 struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {if(l1 NULL) return l2;if(l2 NULL)return l1;struct ListNode* head NULL, *tail NULL;//先确定头节点if(l1-val l2-val){head tail l1;l1 l1-next;}else{head tail l2;l2 l2-next;}while(l1 l2){//尾插if(l1-val l2-val){ tail-next l1;l1 l1-next;}else{tail-next l2;l2 l2-next;}tail tail-next;}if(l1)tail-next l1;if(l2)tail-next l2;return head; }优化二: 设置一个哨兵位的头节点然后再去尾插。 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {if(l1 NULL) return l2;if(l2 NULL)return l1;struct ListNode* head NULL, *tail NULL;//哨兵位的头节点head tail (struct ListNode*)malloc(sizeof(struct ListNode));while(l1 l2){//尾插if(l1-val l2-val){ tail-next l1;l1 l1-next;}else{tail-next l2;l2 l2-next;}tail tail-next;}if(l1)tail-next l1;if(l2)tail-next l2;struct ListNode* first head-next;free(head);return first; }思路二递归法 这是题解中大佬的一个解法以迭代的思路写递归尤为惊人 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){/*if判断1.如果l1为空返回l22.如果l2为空返回l13.如果l1的值小于l2比较l1的next值和l2并把值赋给l1的下一个返回l14.反之比较l1和l2的next值并把值赋给l2的下一个返回l2*/if (l1 NULL) {return l2;} else if (l2 NULL) {return l1;} else if (l1-val l2-val) {l1-next mergeTwoLists(l1-next, l2);return l1;} else {l2-next mergeTwoLists(l1, l2-next);return l2;} } 因为有缓冲区的存在C语言在操作文件的时候需要做刷新缓冲区或者在文件操作结束的时候关闭文件。 如果不做可能导致读写文件的问题。 今天就先到这了 看到这里了还不给博主扣个 ⛳️ 点赞☀️收藏 ⭐️ 关注 你们的点赞就是博主更新最大的动力 有问题可以评论或者私信!
http://www.w-s-a.com/news/625428/

相关文章:

  • 婚纱摄影网站设计案例四川省城乡建设厅官方网站
  • 怎么做海淘网站wordpress首页表单
  • 大连网站优化技术长沙高端网站建设服务
  • 郎创网站建设做的网站 v2ex
  • 广东网站建设教程江西城乡住房建设网站
  • 做ppt卖给网站wordpress insert
  • 文化传媒公司网站模板wordpress转typecho
  • 网站建设设计视频郑州 服装网站建设
  • 网站建设什么公司好织梦cms默认密码
  • 大型网站 空间网上商城官网入口
  • 成都全美网站建设江苏专业网站建设
  • 足球网站模板有帮忙做阿里巴巴网站的吗
  • 建设厅报名网站京东网站的建设与发展前景
  • 金寨县住房和城乡建设部网站网页作业怎么做一个网站
  • 做ppt模板网站有哪些内容wap是什么意思卡老师
  • 网站建设一定要域名吗网站后台关键词设置
  • 标书制作公司网站坪山网站建设哪家便宜
  • 防止做网站的人修改数值门户网站架构
  • 电子项目外包网站考二建需要什么学历和专业
  • 做网站推广引流效果好吗电商推广技巧
  • 亦庄网站建设价格广州网站推广服务
  • 十大免费ppt网站下载重庆在线高校平台登录
  • 做环保网站案例百度seo教程
  • 体育用品网站模板网站建设话术
  • 潍坊网站建设服务商做网站多久能盈利
  • 嘉定区做网站房产信息查询官网
  • 网站直播间 是怎么做的唐山论坛建站模板
  • 深圳洲聚网站建设wordpress 泛解析
  • 五金东莞网站建设技术支持wordpress 添加模板
  • 网站申请专利春节网页设计素材