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

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

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++在线编程练习题解

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

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