题解 | #JZ52 两个链表的第一个公共结点#

两个链表的第一个公共结点

http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

//两个链表分别相连(一个1在前,一个2在前),变为等长的两个链表, 最后会有一段公共子链表。

struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
/*        while (pHead1) {
            ListNode *pNode = pHead2;
            while (pNode) {
                if (pNode == pHead1) return pNode;
                else pNode = pNode->next;
            }
            pHead1 = pHead1->next;
        }
        return NULL; */
        ListNode *p1 = pHead1, *p2 = pHead2;
        if (p1==NULL || p2==NULL) return NULL;
        while (p1 != p2) {
            p1 = p1->next;
            p2 = p2->next;
            if (p1 != p2) {    //结尾都为NULL
                if (!p1) p1 = pHead2;    //把两个链表链接起来,等长,最后一段公共部分肯定重合
                if (!p2) p2 = pHead1;
            }
        }
        
        return p1;
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 18:13
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务