您的位置:首页 > 其它

Intersection of Two Linked Lists

2015-03-05 22:52 162 查看
编程之美上有这题,先计算这两链表的长度,然后从这两链表长度相等处扫一遍,找到相同节点就跳出即可。

O(n)的时间复杂度 O(1)的空间开销

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *p1 = headA,*p2 = headB,*p = NULL;
int lenA = 0 , lenB = 0;
while(p1){
p1 = p1->next;
lenA++;
}
while(p2){
p2 = p2->next;
lenB++;
}
p1 = headA;p2 = headB;
if(lenA>lenB){
for(int i = 0 ; i < lenA-lenB ; i++){
p1 = p1->next;
}
}else {
for(int i = 0 ; i <lenB-lenA ; i++){
p2 = p2->next;
}
}
for(;p1;p1 = p1->next,p2 = p2->next){
if(p1 == p2){
p = p1;
break;
}
}
return p;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: