Intersection of Two Linked Lists
2015-03-08 10:50 笨笨的老兔子 阅读(138) 评论(0) 编辑 收藏 举报存在两个单向链表,如果两者在某个节点相交合并,则返回交点,不相交则返回null。
思路:如果两个链表长度相等,则两个指针依次前进,到结尾之前如果遇到val值相等,则返回该节点。如果不相等,则长的那个链表先走若干步,使得剩下的步数与短的链表的步数相同。
注意点
- 空指针
由于是单链表,需要保存链表头
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if (headA == NULL || headB == NULL)
{
return NULL;
}
int lengthA = 0, lengthB = 0;
ListNode* tmpA = headA;
ListNode* tmpB = headB;
while (tmpA->next != NULL)
{
lengthA++;
tmpA = tmpA->next;
}
while (tmpB->next != NULL)
{
lengthB++;
tmpB = tmpB->next;
}
if (tmpA->val != tmpB->val)
return NULL;
tmpA = headA;
tmpB = headB;
if (lengthA >lengthB)
{
for (size_t i = 0; i < lengthA-lengthB; i++)
{
headA = headA->next;
}
}
else
{
for (size_t i = 0; i < lengthB - lengthA; i++)
{
headB = headB->next;
}
}
while (headA != NULL)
{
if (headA->val == headB->val)
{
return headA;
}
else
{
headA = headA->next;
headB = headB->next;
}
}
}
};