两个链表的第一个公共结点
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;
}
};