zoukankan      html  css  js  c++  java
  • HappyLeetcode42:Intersection of Two Linked Lists

    Write a program to find the node at which the intersection of two singly linked lists begins.

    For example, the following two linked lists:

    A:          a1 → a2
                       ↘
                         c1 → c2 → c3
                       ↗            
    B:     b1 → b2 → b3

    begin to intersect at node c1.

    Notes:

    • If the two linked lists have no intersection at all, return null.
    • The linked lists must retain their original structure after the function returns.
    • You may assume there are no cycles anywhere in the entire linked structure.
    • Your code should preferably run in O(n) time and use only O(1) memory.

    Credits:
    Special thanks to @stellari for adding this problem and creating all test cases.

    这道题除了阅读题目的困难较大之外, 其他的都还好。非常好做的一道题目。

    代码如下:

    //* Definition for singly-linked list.
     struct ListNode {
         int val;
         ListNode *next;
         ListNode(int x) : val(x), next(NULL) {}
     };
    
    class Solution {
    public:
        ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
            if (headA == NULL || headB == NULL)
                return NULL;
            int lengtha=1, lengthb=1;
            ListNode *cora = headA, *corb = headB;
            while (cora->next != NULL)
            {
                cora = cora->next;
                lengtha++;
            }
            while (corb->next != NULL)
            {
                corb = corb->next;
                lengthb++;
            }
            if (cora->val != corb->val)
                return NULL;
            int dif = lengtha - lengthb;
            cora = headA, corb = headB;
            if (dif >= 0)
            {
                while (dif)
                {
                    dif--;
                    cora = cora->next;
                }
            }
            else
    
            {
                while (dif)
                {
                    dif++;
                    corb = corb->next;
                }
            }
    
            while (cora != NULL)
            {
                if (cora == corb)
                    return cora;
                else
                {
                    cora = cora->next;
                    corb = corb->next;
                }
            }
        }
    };
  • 相关阅读:
    常见ETL工具一览
    php语言查询Mysql数据库内容
    修改博客园模板样式
    《将博客搬至CSDN》
    使用 Git 和 GitHub 托管项目源码
    Delphi webbrowser 的一些方法
    Delphi 实现 图灵机器人API(IDHTTP POST )
    Delphi 中调用JS文件中的方法
    HTTP 常见异常状态及Delphi IDHTTP 控件处理方式
    Delphi Cookie获取及使用
  • 原文地址:https://www.cnblogs.com/chengxuyuanxiaowang/p/4209448.html
Copyright © 2011-2022 走看看