• LC.160. Intersection of Two Linked Lists


    https://leetcode.com/problems/intersection-of-two-linked-lists/description/

    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.
    //time:o(n) space:o(1)

     1 public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
     2         if (headA == null || headB == null) {
     3             return null;
     4         }
     5         int lengthA = getLength(headA);
     6         int lengthB = getLength(headB);
     7         ListNode currA = headA;
     8         ListNode currB = headB;
     9         if (lengthA > lengthB) {
    10             while (lengthA != lengthB) {
    11                 currA = currA.next;
    12                 lengthA--;
    13             }
    14         } else {
    15             while (lengthB != lengthA){
    16                 currB = currB.next ;
    17                 lengthB--;
    18             }
    19         }
    20         //now they are the same length
    21         while (currA!=currB ){
    22             currA = currA.next ;
    23             currB = currB.next ;
    24         }
    25         //out of while, means currA == currB, including both == null
    26         return currA ;
    27     }
    28 
    29     private int getLength(ListNode head) {
    30         int length = 1;
    31         while (head != null) {
    32             head = head.next;
    33             length++;
    34         }
    35         return length;
    36     }
  • 相关阅读:
    两个layout之间怎么切换好
    测试- 就从这儿起步
    Fiddler 学习
    我的周记4——“要繁荣富强,不要再让人欺负了”
    谈谈游戏
    我的周记3——“雨打梨花深闭门,忘了青春,误了青春”
    我的周记2——“天道酬勤"
    说说Charles
    Book list
    STL学习笔记(仿函数)
  • 原文地址:https://www.cnblogs.com/davidnyc/p/8642842.html
Copyright © 2020-2023  润新知