寻找两个相交链表的第一个公共节点的问题
2016-11-06 13:26
323 查看
在leetcode做题时遇到的问题,首先是最后通过的代码
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA==NULL||headB==NULL)
return NULL;
int count1=0;
int count2=0;
ListNode *p1=headA;
ListNode *p2=headB;
while(p1!=NULL)
{
count1++;
p1=p1->next;
}
while(p2!=NULL)
{
count2++;
p2=p2->next;
}
p1=headA;
p2=headB;
if(count1>count2)
{
int dist=count1-count2;
while(dist>0)
{
p1=p1->next;
dist--;
}
}
if(count2>count1)
{
int dist=count2-count1;
while(dist>0)
{
p2=p2->next;
dist--;
}
}
while(p1!=NULL&&p2!=NULL&&p1!=p2)
{
p1=p1->next;
p2=p2->next;
}
if(p1==p2)
return p1;
return NULL;
}
};
一开始的时候,最后if(p1==p2)这个分支的判断条件我写的是if(p1!=NULL&&p2!=NULL),这种情况下测试用例一直无法通过,报错一直都是输入None,预期输出是没有相交,但我的代码是有相交结果的,这个地方是在搞不懂,希望有高手看到能给予解答
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA==NULL||headB==NULL)
return NULL;
int count1=0;
int count2=0;
ListNode *p1=headA;
ListNode *p2=headB;
while(p1!=NULL)
{
count1++;
p1=p1->next;
}
while(p2!=NULL)
{
count2++;
p2=p2->next;
}
p1=headA;
p2=headB;
if(count1>count2)
{
int dist=count1-count2;
while(dist>0)
{
p1=p1->next;
dist--;
}
}
if(count2>count1)
{
int dist=count2-count1;
while(dist>0)
{
p2=p2->next;
dist--;
}
}
while(p1!=NULL&&p2!=NULL&&p1!=p2)
{
p1=p1->next;
p2=p2->next;
}
if(p1==p2)
return p1;
return NULL;
}
};
一开始的时候,最后if(p1==p2)这个分支的判断条件我写的是if(p1!=NULL&&p2!=NULL),这种情况下测试用例一直无法通过,报错一直都是输入None,预期输出是没有相交,但我的代码是有相交结果的,这个地方是在搞不懂,希望有高手看到能给予解答
相关文章推荐
- 寻找两个相交链表的第一个公共节点
- 两个链表相交以及第一个公共节点的问题
- 寻找两个相交链表的第一个公共节点
- 寻找两个相交的单链表的第一个节点
- 【数据结构】单链表—寻找两个相交链表中第一个公共结点 — 蛮力法 / 栈 / 指针先走
- 已知有两个链表,判断它们是否相交,若相交求其第一个公共节点
- 判断两个单链表是否相交同时找出第一个相交点(单链表是否有环及寻找入口节点)
- 两个单向链表相交,找到第一个公共节点
- 判断两个链表是否相交;查找两个链表的第一个公共节点;头插法建链表(补充)
- 《剑指Offer》面试题:寻找两个链表的第一个公共节点
- 两个链表的第一个公共节点
- 两链表的第一个公共结点(比较两个链表节点是否相同时比较不了啊,该题尚未完成)
- 判断两个链表是否相交及获得相交的第一个节点
- 寻找两个单链表的第一个公共节点
- 两个单向链表的第一个公共节点
- 输入两个链表,找出他们的第一个公共节点
- 链表是否存在环及环入口点、两个链表是否相交、相交链表的第一个公共结点
- 两个链表中的第一个公共节点
- 面试题 37 两个链表的第一个公共节点
- 两个链表的第一个公共节点