(链表)链表第一个公共结点

题目描述
输入两个链表,找出它们的第一个公共结点。

思路
两个链表如果有交点,那么只有两种情况
1.呈"Y"字形,重复后的节点连成一条
2.呈“I”字形,一条链表是另一条的一部分
不管什么形式,这两条链表的后面一定是重合的,那么我把两条链表分别保存在栈结构中,然后同时出栈,直到两边的栈顶不相等时,那么前一个节点就是公共节点。

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
   ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        if(pHead1 == NULL || pHead2 == NULL)
            return NULL;
         
        stack<ListNode*> stack1;
        stack<ListNode*> stack2;
        while(pHead1 != NULL)
        {
            stack1.push(pHead1);
            pHead1 = pHead1->next;
        }
        while(pHead2 != NULL)
        {
            stack2.push(pHead2);
            pHead2 = pHead2->next;
        }
        ListNode* sharepHead = NULL;
//!!!注意这里的判断,一定要加上(!stack1.empty())&&(!stack2.empty())
        while((!stack1.empty())&&(!stack2.empty())&&(stack1.top() 
== stack2.top()))
        {
                sharepHead = stack1.top();
                stack1.pop();
                stack2.pop();
        }
        return sharepHead;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。