Intersection of Two Linked Lists

编程之美上有这题,先计算这两链表的长度,然后从这两链表长度相等处扫一遍,找到相同节点就跳出即可。

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;
}

 

posted @ 2015-03-05 22:52  SprayT  阅读(98)  评论(0编辑  收藏  举报