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

Posted 张乐乐章

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于36两个链表的第一个公共结点的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer系列——36.两个链表的第一个公共结点

36剑指offer--两链表的第一个公共结点

36.两个链表的第一个公共节点。

36 两个链表的第一个结点

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

剑指offer两个链表的第一个公共结点