首页 > 其他 > 详细

剑指offer36-两个链表的第一个公共结点

时间:2020-02-24 22:07:19      阅读:76      评论:0      收藏:0      [点我收藏+]

题目描述

输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)

正常情况下,两个链表前面部分是不同的,后面部分是相通的

/*
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;
        //将链表1放入栈中
        while(pHead1!=NULL){
            stack1.push(pHead1);
            pHead1 = pHead1->next;
        }
        //将链表2放入栈中
        while(pHead2!=NULL){
            stack2.push(pHead2);
            pHead2 = pHead2->next;
        }
        //两个栈同时往外出
        ListNode* p = stack1.top();
        ListNode* q = stack2.top();
        ListNode* result = NULL;
        while(!stack1.empty() && !stack2.empty()){
            p = stack1.top();
            q = stack2.top();
            if(p->val == q->val){
                result = stack1.top();
                stack1.pop();
                stack2.pop();
            }
            else{
                break;
            }
        }
        return result;
        
    }
};

 

剑指offer36-两个链表的第一个公共结点

原文:https://www.cnblogs.com/loyolh/p/12358915.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!