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

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

http://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) {
//首先要理解公共结点的意思是什么;公共部分一定出现在尾部,用两个栈从后往前遍历,
//找到第一个不相等的结点,其前一个结点就是第一个公共结点
stack<ListNode> stk1, stk2;
ListNode
res = nullptr;
//入栈
while(pHead1 != nullptr)
{
stk1.push(pHead1);
pHead1 = pHead1->next;
}
while(pHead2 != nullptr)
{
stk2.push(pHead2);
pHead2 = pHead2->next;
}
//比较两个栈的栈顶元素,相等就保存下来,不等就说明上一个保存的结点是第一个公共结点
while(!stk1.empty() && !stk2.empty())
{
if(stk1.top() == stk2.top())
{
res = stk1.top();
stk1.pop();
stk2.pop();
}else{
break;
}
}
return res;
}
};

全部评论

相关推荐

09-17 19:25
已编辑
太原理工大学 游戏测试
叁六玖:公司名发我,我要这个HR带我打瓦
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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