题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { // 思路:先确定两个链表的长度,然后,截掉比较长的链表的多出来的部分,然后同步向前遍历,判断节点是否相等 int i = 0; int j = 0; auto p1 = pHead1; auto p2 = pHead2; while (p1 != nullptr) { p1 = p1->next; i++; } while (p2 != nullptr) { p2 = p2->next; j++; } int n = 0; int m = 0; if (i > j) { m = j; n = i-j; while (n > 0) { n--; pHead1 = pHead1->next; } } else if (i < j) { m = i; n = j-i; while (n > 0) { n--; pHead2 = pHead2->next; } }else { m =i; } while (m > 0) { if (pHead1 == pHead2) { return pHead1; } pHead1 = pHead1->next; pHead2 = pHead2->next; m--; } return nullptr; } };
在线编程练习 文章被收录于专栏
C++在线编程练习题解