Leetcode 160. Intersection of Two Linked Lists
Leetcode 160. Intersection of Two Linked Lists
错解
一开始没看清题目的要求中,提到最后表结构不能变,想到的做法是:
先遍历A,把A翻转,然后B就可以走到headA判断出它们是否相交,但是即便如此,也不能判断出相交点在哪里,而且还会破坏链表的结构,所以这种写法不行。
正解
把A,B首位相接,根据节点数量关系,我们能确定,只要二者相交,遍历的时候就一定会在交点相遇。
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *curA = headA, *curB = headB;
while(curA != curB) {
curA = curA?curA->next:headB;
curB = curB?curB->next:headA;
}
return curA;
}
};
注意curA = curA?curA->next:headB;
这里不能写curA->next?curA->next:headB
,我们要允许curA/B能够走到NULL,否则虽然不会影响在相交情况下的判断,但是在不相交的情况下,由于curA和curB都不会走到NULL,就会陷入死循环TLE。
本文作者:Gold_stein
本文链接:https://www.cnblogs.com/smartljy/p/18489408
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2019-10-21 1821:【00NOIP提高组】乘积最大
2019-10-21 1820:【00NOIP提高组】进制转换