[剑指offer]两个链表的第一个公共结点

来源:互联网 发布:海尔热水器电死人 知乎 编辑:程序博客网 时间:2024/05/27 14:14

题目描述

输入两个链表,找出它们的第一个公共结点。

分析:计算两个链表的长度,同时比较一下链表尾元素是否相同,如果不同那么两个链表就不相交。让比较长的链表的指针先走两个链表长度的差值,然后两个指针再一起走,知道两个指针指向相同元素,这个元素就是第一个公共节点。

代码:

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :            val(x), next(NULL) {    }};*/class Solution {public:    ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {        int n1=0;        int n2=0;        ListNode* p=pHead1;        ListNode* q=pHead2;        while(p!=nullptr){            n1++;            p=p->next;        }        while(q!=nullptr){            n2++;            q=q->next;        }        if(p!=q) return nullptr;        p=pHead1;        q=pHead2;        if(n1>n2){            while(n1>n2){                p=p->next;                n1--;            }            while(p!=q){                p=p->next;                q=q->next;            }            return p;        }else{            while(n2>n1){                q=q->next;                n2--;            }            while(p!=q){                p=p->next;                q=q->next;            }            return p;        }    }};


0 0
原创粉丝点击