zoukankan      html  css  js  c++  java
  • 两个链表的第一个公共结点

    题目描述:输入两个链表,找出它们的第一个公共结点。

    我的思路:起初看到这个题目我的思路是从其中的一个链表开始,然后依次和第二个链表的进行比较,但这样的话时间复杂度比较大,所以这个方法也只能是比较笨的方法了。再后 来,参考了书上的想法后,大致有以下两种思路:

    (1)从链表的尾部开始遍历,找到它们最后最后一个相同的结点,但这种想法需要借助栈来实现;

    (2)比较两个链表的长度,让链表长的先遍历,直至和链表短的长度相同,此时两个链表同时开始遍历,找到它们的第一个相同结点即为它们的公共结点。

    注意:我刚开始误以为公共结点是这两个链表第一个相同的结点,但不是,一旦找到了第一个公共结点,那它之后的结点肯定是相同的,也就是成Y型,如下图:

       

    代码实现(思路二):

    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
               if(pHead1==null||pHead2==null)
                   return null;
               int len1 = 0,len2=0;
               ListNode pnode1 = pHead1;
               ListNode pnode2 = pHead2;
               while(pnode1!=null)
               {
                    len1++;
                    pnode1 = pnode1.next;
                   
               }
              while(pnode2!=null)
               {
                    len2++;
                    pnode2 = pnode2.next;
                    
               }
              int n = len1-len2;
               if(n>0)
               {            
                   while(n>0)
                   {
                       pHead1=pHead1.next;
                       n--;
                   }  
                   while(pHead1!=pHead2)
                  {
                    pHead1 = pHead1.next;
                    pHead2 = pHead2.next;              
                  }
                return pHead1;
                  }
              else if(n<=0)
               {
                  
                   while(n<0)
                   {
                       pHead2=pHead2.next;
                       n++;
                   }              
              
              while(pHead1!=pHead2)
              {
                   pHead2 = pHead2.next;        
                    pHead1 = pHead1.next;
                         
              }
             return pHead1;
                  }
             return null;
        }
       
    }

    注意:之前因为理解错题的原因,使得括号里的判断条件写成了pHead1.val = pHead2.val,使得不能通过全部案例,所以这块要注意一下。

  • 相关阅读:
    程序员的人品
    【转】telnet使用 删除foxmail不能收取的邮件
    35岁以后我在干什么?
    面试
    程序员基本知识数制
    一事无成
    经过XssFilter替换特殊字符后再经zuul路由转发httpEntity缺少内容
    android跳转到市场进行评价 market://search?q
    使用IntelliJ 12.1.12开发android程序
    重定向
  • 原文地址:https://www.cnblogs.com/Dream-chasingGirl/p/10176807.html
Copyright © 2011-2022 走看看