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

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

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

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
	该题仍然考的是双指针的考点,即快慢指针的考点;
};*/
class Solution {
public:

		size_t GetLength(ListNode* head) {
			size_t count = 0;
			while (head != nullptr) {
				++count;
				head = head->next;
			}
			return count;
		}


    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
			auto count1 = GetLength(pHead1);
			auto count2 = GetLength(pHead2);

			auto OffsetHead = [](ListNode* head, int offset) {
				for (auto i = 0; i < offset; ++i)
					head = head->next;
				return head;
			};

			if (count1 > count2)
				pHead1 = OffsetHead(pHead1, count1 - count2);
			else if (count1 < count2)
				pHead2 = OffsetHead(pHead2, count2 - count1);

			while (pHead1 != pHead2 && pHead1 != nullptr) {
				pHead1 = pHead1->next;
				pHead2 = pHead2->next;
			}

			if (pHead1 != nullptr)
				return pHead1;
			else 
			  return nullptr;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务