zoukankan      html  css  js  c++  java
  • 寻找两个链表的第一个公共子节点,C++

    1、效率最低的方法就是使用两层循环,循环遍历比较两个节点是否相同。O(n^2)

    2、观察到自从公共子节点之后,后面的链表必定是相同的。所以就可以使用两个栈,逐个放入。弹出的时候,遇到第一个不同的节点。之前的一个节点就是所求的第一个公共子节点。O(n)

    如下图所示:

    3、从头到尾遍历,计算两个链表的长度。接着在长的链表首部剪去比短的链表长的部分。接着从头到尾逐个按对比较,第一对相同的结点就是一个公共子节点。O(n)

    #include<iostream>
    #include<cmath>
    using namespace std;
    
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };
    class Solution {
    public:
        ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
            ListNode *pHeadPointer1 = pHead1,*pHeadPointer2 = pHead2;
            int count1 = 0, count2 = 0;
            while (pHeadPointer1 != NULL)
            {
                pHeadPointer1 = pHeadPointer1->next;
                count1++;
            }
            while (pHeadPointer2 != NULL)
            {
                pHeadPointer2 = pHeadPointer2->next;
                count2++;
            }
            pHeadPointer1 = pHead1;
            pHeadPointer2 = pHead2;
            if (count1 > count2)
            {
                for (int i = 0; i < count1 -count2; i++)
                {
                    pHeadPointer1 = pHeadPointer1->next;
                }
            } else {
                for (int i = 0; i < count2 - count1; i++)
                {
                    pHeadPointer2 = pHeadPointer2->next;
                }
            }
            int temp = min(count1, count2);
            for (int i = 0 ;i < temp; i++)
            {
                if (pHeadPointer1->val == pHeadPointer2->val && pHeadPointer1->next == pHeadPointer2->next)
                {
                    return pHeadPointer1;
                }
                pHeadPointer1 = pHeadPointer1->next;
                pHeadPointer2 = pHeadPointer2->next;
            }
            return NULL;
        }
    };
  • 相关阅读:
    php7.1安装
    nginx 的限制连接模块limit_zone与limit_req_zone
    selinux导致docker启动失败
    docker学习笔记
    kvm虚拟机
    ZooKeeper在线迁移
    启动EMQ(emqtt)时报错找不到libsctp.so.1
    Linux Samba服务主配文件smb.conf中文详解
    python-day7-字符串类型的内置方法
    python-day7-数字类型的内置方法
  • 原文地址:https://www.cnblogs.com/adamhome/p/7941386.html
Copyright © 2011-2022 走看看