美文网首页
(链表)链表第一个公共结点

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

作者: new_liziang | 来源:发表于2019-03-25 10:58 被阅读0次

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

    思路
    两个链表如果有交点,那么只有两种情况
    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;
        }
    };
    

    相关文章

      网友评论

          本文标题:(链表)链表第一个公共结点

          本文链接:https://www.haomeiwen.com/subject/pvgjmqtx.html