☀️博客主页:CSDN博客主页
本文由 我是小狼君 原创,首发于 CSDN
学习专栏推荐:面试汇总
❗️游戏框架专栏推荐:游戏实用框架专栏
⛅️点赞 收藏 ⭐留言 ,如有错误请指正
未来很长,值得我们全力奔赴更美好的生活✨
老规矩,先介绍一下Unity的科普小知识:
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:
简单-160. 相交链表
暴力破解方法
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