• 输入两个单向链表,找出它们的第一个公共结点


    题目:

    输入两个单向链表,找出它们的第一个公共结点

    解答:

     1 public class Solution {
     2 
     3 
     4     public static void main(String[] args) {
     5         ListNode head1 = new ListNode();
     6         ListNode second1 = new ListNode();
     7         ListNode third1 = new ListNode();
     8         ListNode forth1 = new ListNode();
     9         ListNode fifth1 = new ListNode();
    10         ListNode head2 = new ListNode();
    11         ListNode second2 = new ListNode();
    12         ListNode third2 = new ListNode();
    13         ListNode forth2 = new ListNode();
    14         head1.nextNode = second1;
    15         second1.nextNode = third1;
    16         third1.nextNode = forth1;
    17         forth1.nextNode = fifth1;
    18         head2.nextNode = second2;
    19         second2.nextNode = forth1;
    20         third2.nextNode = fifth1;
    21         head1.data = 1;
    22         second1.data = 2;
    23         third1.data = 3;
    24         forth1.data = 6;
    25         fifth1.data = 7;
    26         head2.data = 4;
    27         second2.data = 5;
    28         third2.data = 6;
    29         forth2.data = 7;
    30         System.out.println(findFirstCommonNode(head1,head2).data);
    31         
    32     }
    33 
    34     public static ListNode findFirstCommonNode(ListNode head1, ListNode head2) {
    35         int len1 = getListLength(head1);
    36         int len2 = getListLength(head2);
    37 
    38         ListNode longListNode = null;
    39         ListNode shortListNode = null;
    40 
    41         int diff = 0;
    42         if(len1 > len2) {
    43             longListNode = head1;
    44             shortListNode = head2;
    45             diff = len1 - len2;
    46         } else {
    47             longListNode = head2;
    48             shortListNode = head1;
    49             diff = len2 - len1;
    50         }
    51 
    52         for(int i = 0; i < diff; i++) {
    53             longListNode = longListNode.nextNode;
    54         }
    55 
    56         while(longListNode != null && shortListNode != null && longListNode != shortListNode) {
    57             longListNode = longListNode.nextNode;
    58             shortListNode = shortListNode.nextNode;
    59         }
    60 
    61         return longListNode;
    62     }
    63 
    64 
    65 
    66     private static int getListLength(ListNode head) {
    67         int result = 0;
    68         if(head == null) {
    69             return result;
    70         }
    71 
    72         ListNode point = head;
    73         while(point != null) {
    74             point = point.nextNode;
    75             result++;
    76         }
    77 
    78         return result;
    79     }
    80 }
    81 
    82 
    83 public class ListNode {
    84     int data;
    85     ListNode nextnode;
    86 }

     

  • 相关阅读:
    Android开发(30)--AutoCompleteTextView和MultiAutoCompleteTextView自动提示输入内容
    哈希表总结
    Java HttpClient使用小结
    Cocos2d-精灵的几个常识
    java模式之装饰模式
    Spring中AOP的模拟实现
    [置顶] 安卓UI组件之ListView详解
    当开源遇到禅修——“第八届开源世界开源中国高峰论坛”及“2013开源群英会”有感
    [置顶] Adapter详解
    PRJ: Split a nodes-map into some triangles
  • 原文地址:https://www.cnblogs.com/wylwyl/p/10375051.html
Copyright © 2020-2023  润新知