• 寻找两个链表的第一个公共子节点,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;
        }
    };
  • 相关阅读:
    HTML5中的canvas
    预解释
    asp.net中的CheckBox控件的使用
    jQuery 效果
    常用的 jQuery 事件
    轮播图
    迭代器与生成器
    js对象拷贝
    事件循环、同步异步、宏任务微任务
    Vue 的 keep-alive 组件缓存
  • 原文地址:https://www.cnblogs.com/adamhome/p/7941386.html
Copyright © 2020-2023  润新知