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

题目描述

输入两个链表,找出它们的第一个公共结点。
 
首先获得两个链表的长度,将长的链表先走两个链表的长度差,然后在一起走,判断当前结点是否相同
 1 public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {//链表 mytip
 2         ListNode p1 = pHead1;
 3         ListNode p2 = pHead2;
 4         int len1 =0;
 5         int len2 = 0;
 6         while(p1!=null){//获取长度
 7             len1++;
 8             p1=p1.next;
 9         }
10         while(p2!=null){
11             len2++;
12             p2= p2.next;
13         }
14         p1 = pHead1;
15         p2 = pHead2;
16         if(len1>len2){//将长的先移动长度差步
17             for(int i=0;i<len1-len2;i++){
18                 p1=p1.next;
19             }
20         }
21         if(len2>len1){
22             for(int i=0;i<len2-len1;i++){
23                 p2=p2.next;
24             }
25         }
26         while(p1!=null){//两个链表一起迭代,判断当前点是否相同
27             if(p1==p2){
28                 return p1;
29             }
30             p1=p1.next;
31             p2=p2.next;
32         }
33         return null;
34     }

 

简洁版

 1 public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {//链表 mytip
 2         ListNode p1 = pHead1;
 3         ListNode p2 = pHead2;
 4         
 5         while(p1!=p2){//长度不同,则走了两遍每一个都迭代了一个链表1,一个链表2
 6             p1=p1==null?pHead2:p1.next;
 7             p2=p2==null?pHead1:p2.next;
 8         }
 9        
10         return p1;
11     }

 

posted @ 2019-04-15 17:35  月半榨菜  阅读(89)  评论(0编辑  收藏  举报