• 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;
        }
    };
  • 相关阅读:
    常见名词解释
    主板结构解析
    计算机网络原理的总结
    Nginx的介绍
    优雅的python
    python小技巧
    python列表小程序
    学会浏览器查东西
    列表推导式
    深度优先算法与广度优先算法
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8193996.html
Copyright © 2020-2023  润新知