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

     

    题目描述

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

    思路1:
    首次遍历:算出2个链表的长度l1,l2。
    第二次遍历,长的链表先走|l2-l1|步,然后2个链表同时遍历,找到第一个相同的节点输出。

     1 public class Solution {
     2     public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
     3          int l1 = 0,l2 = 0,ldiff=0;
     4         ListNode longp,shortp;
     5         
     6         // 得到长度
     7         for(ListNode p = pHead1;p!=null;p=p.next)
     8             l1++;
     9         for(ListNode p = pHead2;p!=null;p=p.next)
    10             l2++;
    11         if(l1>l2){
    12             ldiff = l1-l2;
    13             longp=pHead1;shortp = pHead2;
    14         }
    15            else{
    16              ldiff = l2-l1;
    17             longp=pHead2;shortp = pHead1;
    18         }
    19         //长链表先走
    20         for(int i = 0;i<ldiff;i++){
    21             longp = longp.next;
    22         }
    23         //2个链表同时遍历
    24         while(longp!=null){
    25             if(longp.val==shortp.val) return longp;
    26             longp = longp.next;
    27             shortp = shortp.next;
    28             
    29         }
    30         return null; 
    31     }
    32 }

    C++:20180726

     1 /*
     2 struct ListNode {
     3     int val;
     4     struct ListNode *next;
     5     ListNode(int x) :
     6             val(x), next(NULL) {
     7     }
     8 };*/
     9 class Solution {
    10 public:
    11     ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
    12         //find coross
    13         ListNode* fast = pHead1;
    14         ListNode* slow = pHead2;
    15         int l1 = 0,l2 = 0,d=0;
    16         while(fast!=NULL) {fast=fast->next;l1++;}
    17         while(slow!=NULL) {slow=slow->next;l2++;}
    18         if(l1>l2) {
    19             fast = pHead1;
    20             slow = pHead2;
    21             d = l1-l2;
    22         }
    23         else{
    24             fast = pHead2;
    25             slow = pHead1;
    26             d = l2-l1;
    27         } 
    28         
    29         for(int i = 0;i<d;i++)
    30             fast = fast->next;
    31         while(fast!=NULL){
    32             if(fast==slow)
    33                     return fast;
    34             fast = fast->next;
    35             slow = slow->next;
    36         }
    37         return NULL;
    38     }
    39 };

      

  • 相关阅读:
    Virtualbox-CentOS网络配置
    使用phpmyadmin创建数据库
    Vue CLI的使用
    webpack3的使用
    Vue组件化之插槽
    Vue组件化开发
    Vue高级技巧
    Vue基础学习笔记
    Git解决冲突和diff用法
    Git常用命令举例
  • 原文地址:https://www.cnblogs.com/zle1992/p/8167741.html
Copyright © 2011-2022 走看看