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

你快乐吗?

Posted by bbkgl on September 26, 2019

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

C++,链表。

首先分别遍历链表1和2,记录下二者长度差为k,然后利用两个指针遍历两个链表,先遍历长链表,当长链表指针走了k步时,短链表指针才开始走,碰到第一个相等的公共结点就是解。

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        ListNode *p = pHead1, *q = pHead2;
        int len1 = 0, len2 = 0;
        while (p || q) {
            if (p) {
                p = p->next;
                len1++;
            }
            if (q) {
                q = q->next;
                len2++;
            }
        }
        p = pHead1, q = pHead2;
        if (len1 < len2) swap(p, q);
        for (int i = 0; i < abs(len1 - len2); i++) p = p->next;
        while (p != q) {
            p = p->next;
            q = q->next;
        }
        return p;
    }
};