☀️博客主页:CSDN博客主页
💨本文由 我是小狼君 原创,首发于 CSDN💢
🔥学习专栏推荐:面试汇总
❗️游戏框架专栏推荐:游戏实用框架专栏
⛅️点赞 👍 收藏 ⭐留言 📝,如有错误请指正
📆 未来很长,值得我们全力奔赴更美好的生活✨
Unity 小科普
老规矩,先介绍一下Unity的科普小知识:
- Unity 是行业领先的实时3D开发平台。
- 包括游戏开发,电影,AR/VR,虚拟现实在内的所有创作者,可以将梦想照进现实。
- Unity提供了一套完整完善的软件解决方案,可用于创作,运营和模拟任何2D和3D的内容,进本全平台支持。
题目
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:
链接
简单-160. 相交链表
示例 1:
示例 2:
方法一(平民解法)
暴力破解方法
代码
private static ListNode HandleData(ListNode headA, ListNode headB)
{
ListNode tempA = headA;
ListNode returnNode = null;
while (tempA != null)
{
ListNode tempB = headB;
while (tempB != null)
{
if (tempA == tempB)
{
returnNode = tempA;
break;
}
tempB = tempB.next;
}
if (returnNode != null)
{
break;
}
tempA = tempA.next;
}
return returnNode;
}
分析
时间复杂度:O(n2)
空间复杂度:O(1)
方法二(大神解法)
文艺版解释
走到尽头见不到你,于是走过你来时的路,等到相遇时才发现,你也走过我来时的路。
人话版解释
若相交,链表A: a+c, 链表B : b+c. a+c+b+c = b+c+a+c 。则会在公共处c起点相遇。若不相交,a +b = b+a 。因此相遇处是NULL
无脑版解释
pA走过的路径为A链+B链
pB走过的路径为B链+A链
pA和pB走过的长度都相同,都是A链和B链的长度之和,相当于将两条链从尾端对齐,如果相交,则会提前在相交点相遇,如果没有相交点,则会在最后相遇。
pA:1->2->3->4->5->6->null->9->5->6->null
pB:9->5->6->null->1->2->3->4->5->6->null
代码
private static ListNode HandleData(ListNode headA, ListNode headB)
{
if (headA == null || headB == null)
{
return null;
}
ListNode pA = headA;
ListNode pB = headB;
while (pA != pB)
{
pA = pA == null ? headB : pA.next;
pB = pB == null ? headA : pB.next;
}
return pA;
}
分析
时间复杂度:O(n)
空间复杂度:O(1)
链接
我的LeetCode
算法题GitCode