剑指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 }