将两个链表倒过来比较,如果元素相同则继续比较,直到遇到不是相同的元素时退出循环。这里使用stack来将链表倒过来。
/*
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*> head1_stack;
stack<ListNode*> head2_stack;
ListNode* p = pHead1;
while(p)
{
head1_stack.push(p);
p = p->next;
}
ListNode* q = pHead2;
while(q)
{
head2_stack.push(q);
q = q->next;
}
ListNode* rst = NULL;
while(!head1_stack.empty() && !head2_stack.empty())
{
if(head1_stack.top() == head2_stack.top())
{
rst = head1_stack.top();
head1_stack.pop();
head2_stack.pop();
}else
{
break;
}
}
return rst;
}
};
京公网安备 11010502036488号