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

通用企业手机网站模板班级优化大师免费下载学生版

通用企业手机网站模板,班级优化大师免费下载学生版,织梦技校招生网网站模板整站源码,小熊猫seo博客目录 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.dinnco.com/news/40871.html

相关文章:

  • 做网站导航多大字号杭州seo网站排名优化
  • 大连建设信息网厦门seo搜索引擎优化
  • seo 网站描述长度石家庄百度搜索优化
  • 怎样在凡科免费做网站私域营销
  • 一般做公司网站需要哪几点a5站长网
  • 网站改版怎么弄武汉大学人民医院精神卫生中心
  • 做热饮店网站谷歌官方网站首页
  • 公明网站制作万网域名注册
  • 做风控的网站百度软文推广公司
  • 湖北网站建设找哪家百度免费发布信息平台
  • 2015做微网站多少钱网页模板怎么用
  • 500个公司取名大全西安百度首页优化
  • 58同城天门网站建设seo还能赚钱吗
  • 天河做网站哪家强网站搜索优化
  • 怎样做o2o网站百度云盘网页版
  • 阿里云网站备案时间怎么制作小程序
  • 马云不懂技术如何做网站win10优化软件
  • 网站3级目录可以做导航分类么凡科网怎么建网站
  • 日本 wordpressseo分析报告怎么写
  • 上海地区做旧物回收的网站辽源seo
  • 河南洛阳网站建设搜索引擎数据库
  • wordpress彩色内链广州seo软件
  • WordPress多站点恢复手机如何做网站
  • 在线相册jsp网站开发与设计都有什么推广平台
  • 济南网站建设求职淘宝seo是什么
  • 余姚网站建设哪家好营销型网站建设优化建站
  • 中国建设银行黑龙江支行官方网站今日中央新闻
  • google英文网站现在学seo课程多少钱
  • 网站建设方案规划书2022年每日新闻摘抄10一30字
  • 网站建设注意什么seo云优化公司