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;
        }
    };
  • 相关阅读:
    bzoj3796
    bzoj2186
    bzoj3769
    bzoj2660
    bzoj2245
    bzoj2916
    bzoj1261
    在IDEA中以TDD的方式对String类和Arrays类进行学习
    2018-2019-2 实验二《Java面向对象程序设计》实验报告
    《Java程序设计》第 6 周学习总结
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8193996.html
Copyright © 2011-2022 走看看