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

企业网站下周我们公司想做网络推广

企业网站下周,我们公司想做网络推广,做网站编辑好吗,用别人身份证备案网站目录 1.题目 代码模板 2.分析 ​编辑 算法误区 正确方法1 但不能通过所有的测试用例 修改后 提交结果 正确方法2 节省代码的技巧 1.题目 https://leetcode.cn/problems/3u1WK4/description/ 给定两个单链表的头节点 headA 和 headB ,请找出并返回两个单…

目录

1.题目

代码模板

2.分析

​编辑 算法误区

正确方法1

但不能通过所有的测试用例

修改后

提交结果 

正确方法2 

节省代码的技巧


1.题目

https://leetcode.cn/problems/3u1WK4/description/

给定两个单链表的头节点 headA 和 headB ,请找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

示例 1:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at '8'
解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。
在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

示例 2:

输入:intersectVal = 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Intersected at '2'
解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。
在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。

示例 3:

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:null
解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。
由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
这两个链表不相交,因此返回 null 。

提示:

  • listA 中节点数目为 m
  • listB 中节点数目为 n
  • 0 <= m, n <= 3 * 104
  • 1 <= Node.val <= 105
  • 0 <= skipA <= m
  • 0 <= skipB <= n
  • 如果 listA 和 listB 没有交点,intersectVal 为 0
  • 如果 listA 和 listB 有交点,intersectVal == listA[skipA + 1] == listB[skipB + 1]

进阶:能否设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案?

注意:本题与主站 160 题相同:160. 相交链表 - 力扣(LeetCode)

代码模板

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{   
}

2.分析

旧版分析见L10.【LeetCode笔记】环形链表(判断链表中是否有环)(旧版)文章

读题可知,对于两个链表相交可能有以下三种情况

中间节点相交

头结点相交(下图为A链表的中间节点和B链表的头节点相交)

尾节点相交

但绝对不存在“X”形的相交情况,一个节点只能有一个next指针

 算法误区

设两个指针p1和p2分别从A和B链表的头节点出发,不能通过p1->val==p2->val来判断到达了相交节点,会对不相交的链表造成误判

正确方法1

将A链表的每个节点的地址和B链表的所有节点的地址进行比较,如果相等则可求出相交节点的地址

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{struct ListNode * pA=headA;struct ListNode * pB=headB;while(pA!=pB){if (pB==NULL){pB=headB;pA=pA->next;}if (pA==NULL)return NULL;pB=pB->next;}return pA;
}

但不能通过所有的测试用例

原因:pB->next==NULL,因此pB=pB->next为pB=NULL->next,不合法,尾部相交会出问题

  

修改后

 其实只需要交换下判断的顺序即可

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{struct ListNode * pA=headA;struct ListNode * pB=headB;while(pA!=pB){if (pA==NULL)return NULL;pB=pB->next;if (pB==NULL){pB=headB;pA=pA->next;}}return pA;
}

 

提交结果 

 这种方法时间复杂度为O(M*N),不推荐使用 

正确方法2 

双指针算法时间复杂度为O(N),参见L7.【LeetCode笔记】相交链表(旧版)

其实双指针的代码还可以写的更简洁些

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{struct ListNode * tailA=headA;struct ListNode * tailB=headB;int lenA=1;int lenB=1;//求A和B链表的长度while (tailA->next){tailA=tailA->next;lenA++;}while (tailB->next){tailB=tailB->next;lenB++;}//两个while循环结束后,tailA和tailB分别指向各自链表的尾部节点if (tailA!=tailB)return NULL;//非尾部相交,返回NULL//头部相交和中间相交的情况int distance=abs(lenA-lenB);//假设A链表为长链表,B链表为短链表struct ListNode * longlist=headA;struct ListNode * shortlist=headB;//假设不成立再更正,节省代码if (lenA<lenB){longlist=headB;shortlist=headA;} while (distance--){longlist=longlist->next;}while(longlist!=shortlist){longlist=longlist->next;shortlist=shortlist->next;}return longlist;
}

节省代码的技巧

假设A链表为长链表(longlis接收),B链表为短链表(shortlist接收),如果假设不成立,再更正(修改longlist和shortlist),这样就不用做if{...}else{...}了,减少重复代码

http://www.laogonggong.com/news/16341.html

相关文章:

  • 做导航网站怎么赚钱企业营销案例
  • 做非法集资资讯的网站贺州seo
  • 商务型企业网站建设风云榜小说排行榜
  • 58网站怎么做浏览度才高自媒体运营
  • 六安网站厦门网站seo外包
  • 行业网站怎么做seo服务公司招聘
  • wordpress用户认证插件逆冬黑帽seo培训
  • 安卓盒子做网站附近有学电脑培训班吗
  • 合肥网站设计建设公司制作电商网站
  • 做网站工作seo站外推广
  • 本科自考最快多久拿证seo搜索引擎优化内容
  • 衡水做wap网站价格关键词下载
  • 网站做不做301三叶草gw9356
  • 樟木头镇仿做网站新东方烹饪学校学费一年多少钱
  • 阿里云域名续费网站谷歌优化方法
  • 创新 反腐倡廉网站建设seo现在还有前景吗
  • 企业网站建立手机怎么制作网站
  • 想在网站上放百度广告怎么做百度导航和百度地图
  • 有肌肉男与小姐姐做床上运动的网站百度手机助手最新版下载
  • 广州住房和城乡建设厅网站新闻头条最新消息今天发布
  • wordpress一键搭建脚本百度seo优化及推广
  • 团支部智慧团建网站营销策划案
  • 中小企业网站建设 论文seo优化推荐
  • 网站硬件费用软文代写自助发稿平台
  • 做网站的像素是多少搜索引擎排名原理
  • 网站导航栏设计做推广哪个平台效果好
  • 东莞网站案例营销哈尔滨百度推广公司
  • 徐州网站开发价位seo网站推广杭州
  • 网站建设 java今日国际军事新闻最新消息
  • 网站标题怎么设置太原seo外包平台