zoukankan      html  css  js  c++  java
  • 35 两个链表的第一个公共结点

    题目描述

    输入两个链表,找出它们的第一个公共结点。
     
    思路:这里首先理解一下暴力的方法,对于链表1的每一个节点,都去链表2中查找是否有该节点。
    然后自己在思考的时候陷入了是否有环链表,这道题目不需要考虑是否有环,因为有环其实就是一个链表。
    这题使用快慢指针,先得到两个链表的长度,定义两个头结点,哪个长就是p1,短的就是p2,长的先走len1 -
    len2,然后两个指针一起走,相交的时候就是第一个交点。
     
    /*
    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 == nullptr || pHead2 == nullptr){
                return nullptr;
            }
            ListNode* p1 = pHead1,*p2 = pHead2;
            int len1 = 0,len2 = 0;
            while(p1 != nullptr){
                ++len1;
                p1 = p1 -> next;
            }
            while(p2 != nullptr){
                ++len2;
                p2 = p2 -> next;
            }
            p1 = pHead1;
            p2 = pHead2;
            if(len1 < len2){
                 p1 = pHead2;
                 p2 = pHead1;
            }
            for(int i = 0;i < abs(len1 - len2);++i){
                p1 = p1 -> next;
            }
            while(p1 != nullptr && p2 != nullptr){
                if(p1 -> val == p2 -> val){
                    return p1;
                }
                else{
                    p1 = p1 -> next;
                    p2 = p2 -> next;
                }
            }
            return nullptr;
        }
    };
  • 相关阅读:
    Avoiding the Backup of Online Redo Logs
    RMAN-20201: datafile not found in the recovery catalog
    ORA-15081: failed to submit an I/O operation to a disk
    字符串替换数字问题
    jstl换行符处理
    字符串匹配问题
    careercup题目20131013
    careercup题目20131010
    careercup题目201330928
    面试题(一)
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8193996.html
Copyright © 2011-2022 走看看