判断两个无环链表是否相交,相交则返回相交首结点

来源:互联网 发布:淘宝买药货到付款原因 编辑:程序博客网 时间:2024/04/28 11:21
  1. /* 
  2. 判断两个链表是否相交,相交则返回相交的结点 
  3. 分为三种情况: 
  4. 1:两个链表都没有环,方法是先分别求出两个链表的长度,然后让指向长链表的首指针先移动两链表长度的差值,然后同步移动,当相等时即为交点 
  5. 2:其中一个有环,一个没有环,则绝对不可能有交点 
  6. 3:两个都有环,分为两种情况,(1)在进环前就相交,转为1的情况 (2)进环后相交或者都有环不相交,只需第一个链表入环结点遍历一圈即可看是否等于第二个链表的入环结点 
  7. */  
  8.   
  9. // 两个链表都没有环,求出交点  
  10. Node *f2(Node *head1, Node *head2, Node *tail){  
  11.     int l1 = 0, l2 = 0;  
  12.     Node *p1 = head1, *p2 = head2;  
  13.     while(p1 != tail){  
  14.         l1++;  
  15.         p1 = p1->next;  
  16.     }  
  17.     while(p2 != tail){   
  18.         l2++;  
  19.         p2 = p2->next;  
  20.     }  
  21.     p1 = head1;  
  22.     p2 = head2;  
  23.     int t = l1 - l2;  
  24.     if(l1 < l2){  
  25.         p1 = head2;  
  26.         p2 = head1;  
  27.         t = l2 - l1;  
  28.     }  
  29.     while(t--) p1 = p1->next;  
  30.     while(p1 != tail && p2 != tail && p1 != p2){  
  31.         p1 = p1->next;  
  32.         p2 = p2->next;  
  33.     }  
  34.     return p1;  

0 0