• Leetcode 160 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.

    目解析:

    Leetcode 里面好多链表的题都可以用快慢指针来解. 

    这道题的思路就是先遍历两个lists然后得到两个lists的长度, 然后让长的那个lists先走Math.abs(lengthA-lengthB)步, 然后一起走判断下一个节点是不是相等.

    注意其中有一步就是两个lists遍历之后要判断最后一个节点是不是相等, 不等就可以直接返回null啦~

     1 public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
     2     if(headA == null && headB == null)
     3         return null;
     4     ListNode node1 = headA;
     5     ListNode node2 = headB;
     6     
     7     int lengthA = 1;
     8     int lengthB = 1;
     9     while(node1 != null){
    10         lengthA++;
    11         node1 = node1.next;
    12     }
    13     while(node2 != null){
    14         lengthB++;
    15         node2 = node2.next;
    16     }
    17 
    18     if(node1 != node2)    //先判断一下
    19         return null;
    20     else{
    21         int count = Math.abs(lengthA - lengthB);
    22         if(lengthA > lengthB){    //此处处理要注意
    23             node1 = headA;
    24             node2 = headB;
    25         }else{
    26             node2 = headA;
    27             node1 = headB;
    28         }
    29         for(int i = 0; i < count; i++){
    30             node1 = node1.next;
    31         }
    32         while(node1 != null && node2 != null & node1 != node2){
    33             node1 = node1.next;
    34             node2 = node2.next;
    35         }
    36         
    37     }
    38     return node1;
    39 }
  • 相关阅读:
    部署webapp到web容器的三种方式(这里的web容器Tomcat)
    jquery1.8.3文档的一些问题(可能是我理解错了,不喜勿喷)
    JQuery异步请求之省略dataType的设置
    Tomcat启动一闪而过的问题(我是windows系统,所以查看的是.bat的文件)
    tomcat控制台乱码问题
    IDEA常用的快捷键和代码模板
    ajax返回问题
    php大文件下载问题
    微信企业付款到银行卡
    支付宝单笔转账支付功能
  • 原文地址:https://www.cnblogs.com/sherry900105/p/4291190.html
Copyright © 2020-2023  润新知