LeetCode Intersection of Two Linked Lists

来源:互联网 发布:aws 中国 阿里云 编辑:程序博客网 时间:2024/06/15 04:43

思路:

“移动快慢指针”的思想:先让长链表的指针(假定为A)走 lenA - lenB 的距离,再两个指针一起走,碰到相同的点就有intersection。

时间复杂度O(N),空间复杂度O(1)。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {        if(headA == NULL || headB == NULL) return NULL;        int lenA = 0, lenB = 0;        ListNode *p1 = headA, *p2 = headB;        while(p1 != NULL) {            lenA++;            p1 = p1->next;        }        while(p2 != NULL) {            lenB++;            p2 = p2->next;        }        int dis = 0;        p1 = headA, p2 = headB;        if(lenA >= lenB) {            dis = lenA - lenB;            while(dis != 0) {                p1 = p1->next;                dis--;            }        }else {            dis = lenB - lenA;            while(dis != 0) {                p2 = p2->next;                dis--;            }        }        while(p1 != NULL && p2 != NULL) {            if(p1 == p2) {                return p1;            }else {                p1 = p1->next;                p2 = p2->next;            }        }        return NULL;    }};
0 0
原创粉丝点击