您的位置:首页 > 其它

36两个链表的第一个公共结点

2018-01-01 16:04 239 查看

题目描述

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

思路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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: