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

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

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

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
#include <unistd.h>
class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
	  //当两链表有一个为空时返回空
		if(pHead1==nullptr||pHead2==nullptr){
			return nullptr;
		}
	  //创建两个节点指向头结点处-
       ListNode* cur1=pHead1;
	   ListNode* cur2=pHead2;
	  //定义计数器
	   int  n=0;
	  //遍历链表一求链表一的长度
	   while(cur1!=nullptr){
		n++;
		cur1=cur1->next;
	   }
	  //遍历链表二求链表二的长度
	   while(cur2!=nullptr){
		n--;
		 //此时n为两链表的差
		cur2=cur2->next;
	   }
	  //当遍历结束节点一不等于节点二直接返回空
	   if(cur1!=cur2){
		return nullptr;
	   }
	  //让两节点重新指向表头
	   cur1=pHead1;
	   cur2=pHead2;
	  //当n大于0cur1移动n
	   if (n>0) {
	   for(int i=0;i<n;i++){
		cur1=cur1->next;
	   }
	   }
	  //当n小于0cur2移动n
	   else if(n<0){
		for(int i=0;i>n;i--){
			cur2=cur2->next;
		}
	   }
	  //两节点同时走相遇点即为公共节点+
	   while(cur1!=cur2){
		cur1=cur1->next;
		cur2=cur2->next;
	   }
	   return cur1;
    }
};

全部评论

相关推荐

10-02 19:29
已编辑
浙江科技大学 运营
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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