判断两个链表是否相交,及其第一个公共交点

来源:互联网 发布:有没有哪种编程的实例 编辑:程序博客网 时间:2024/05/21 05:40

输入两个链表,找出它们的第一个公共结点。
算法思路:若两个链表相交,则从交点开始连个链表的交点都相同。

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :            val(x), next(NULL) {    }};*/class Solution {public:    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {        ListNode *p1=pHead1;        ListNode *p2=pHead2;        int len1=0,len2=0,diff=0;        //遍历第一个链表        while(p1!=NULL){            p1=p1->next;            len1++;        }        //遍历第二个链表        while(p2!=NULL){            p2=p2->next;            len2++;        }        //判断两个链表的长度,找出长度比较大的链表        if(len1>len2){            diff=len1-len2;            p1=pHead1;            p2=pHead2;        }        else{            diff=len2-len1;            p1=pHead2;            p2=pHead1;        }        //让长度比较大的链表先走长度差步数        for(int i=0;i<diff;i++){            p1=p1->next;        }        //两个链表比较,若两个节点相同,则为两个链表的交点        while(p1!=NULL && p2!=NULL){            if(p1==p2)                break;            p1=p1->next;            p2=p2->next;        }        return p1;    }};
阅读全文
0 0