• 380. Intersection of Two Linked Lists【medium】


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

    Notice
    • 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.
     
    Example

    The following two linked lists:

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

    begin to intersect at node c1.

    Challenge

    Your code should preferably run in O(n) time and use only O(1) memory.

    解法一:

     1 class Solution {
     2 public:
     3     /**
     4      * @param headA: the first list
     5      * @param headB: the second list
     6      * @return: a ListNode
     7      */
     8     ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
     9         // write your code here
    10         if(headA == NULL || headB == NULL)
    11             return NULL;
    12         ListNode* iter1 = headA;
    13         ListNode* iter2 = headB;
    14         int len1 = 1;
    15         while(iter1->next != NULL)
    16         {
    17             iter1 = iter1->next;
    18             len1 ++;
    19         }
    20         int len2 = 1;
    21         while(iter2->next != NULL)
    22         {
    23             iter2 = iter2->next;
    24             len2 ++;
    25         }
    26         if(iter1 != iter2)
    27             return NULL;
    28         if(len1 > len2)
    29         {
    30             for(int i = 0; i < len1-len2; i ++)
    31                 headA = headA->next;
    32         }
    33         else if(len2 > len1)
    34         {
    35             for(int i = 0; i < len2-len1; i ++)
    36                 headB = headB->next;
    37         }
    38         while(headA != headB)
    39         {
    40             headA = headA->next;
    41             headB = headB->next;
    42         }
    43         return headA;
    44     }
    45 };
  • 相关阅读:
    阅读《构建之法》1-5章
    构建之法第8,9,10章
    实验5-封装与测试2
    第六次作业-my Backlog
    保存内容
    实验四-单元测试
    实验3—修改版
    做汉堡-57号
    实验3-2
    201306114357-实验3-C语言
  • 原文地址:https://www.cnblogs.com/abc-begin/p/8157802.html
Copyright © 2020-2023  润新知