给定两个单链表,查找这两个单链表的交叉节点。例如:链表listA为:
首先,观察一下交叉节点的特点。如果两个链表有交叉节点的话,那么这个交叉节点之后的其他节点都是相同的,也就是说两个链表的结构应该是
也就是说,
时间复杂度
c++代码如下:
//求出链表长度
int getListLength(ListNode *head)
{
int len = 0;
ListNode *tmp = head;
while(tmp) tmp = tmp->next,len++;
return len;
}
//判断交叉节点
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *a = headA, *b = headB;
int ab = getListLength(a)-getListLength(b);
if(ab > 0)
{
while(ab) a = a->next, ab--;
}
else if(ab < 0)
{
while(ab) b = b->next, ab++;
}
while(a && b)
{
if(a->val == b->val) return a;
a = a->next;
b = b->next;
}
return NULL;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/jeanphorn/article/details/47272119