单链表的相交

 两个不含环的单链表的相交
   相交指的是结点的地址相同,而不是结点的值相同                    
************************************************************************/

[cpp]  view plain  copy
  1. typedef struct node_t  
  2. {  
  3. int data;//data  
  4. struct node_t *next; //next  
  5. }node;  
  6.    
  7. node* find_node(node *head1, node *head2)  
  8. {  
  9. if(NULL == head1 || NULL == head2)  
  10. {  
  11. return NULL;//如果有为空的链表,肯定是不相交的  
  12. }  
  13. node *p1, *p2;  
  14. p1 = head1;  
  15. p2 = head2;  
  16. int len1 = 0;  
  17. int len2 =0;  
  18. int diff = 0;  
  19. while(NULL != p1->next)  
  20. {  
  21. p1 = p1->next;  
  22. len1++;  
  23. }  
  24. while(NULL != p2->next)  
  25. {  
  26. p2 = p2->next;  
  27. len2++;  
  28. }  
  29. if(p1 != p2) //如果最后一个节点不相同,返回NULL  
  30. {  
  31. return NULL;  
  32. }  
  33. diff = abs(len1 - len2);  
  34. if(len1 > len2)  
  35. {  
  36. p1 = head1;  
  37. p2 = head2;  
  38. }  
  39. else  
  40. {  
  41. p1 = head2;  
  42. p2 = head1;  
  43. }  
  44. for(int i=0; i<diff; i++)  
  45. {  
  46. p1 = p1->next;  
  47. }  
  48. while(p1 != p2)  
  49. {  
  50. p1 = p1->next;  
  51. p2 = p2->next;  
  52. }  
  53. return p1;  
  54. }  


链表中有环时

(1)当两个链表中有环时,相交的判断:

如果链表有环且相交,那么这两个链表都是有环的。

找到第一个链表的环点,然后将环断开(当然不要忘记了保存它的下一个节点),然后再来遍历第二个链表,如果发现第二个链表从有环变成了无环,那么他们就是相交的嘛,否则就是不相交的了。

当两个有环的链表相交时,有以下两种情况:

在这种情况下,两个链表的交点在环点之前,可以将环点切断,这样就变成了两个无环的链表求相交点。可使用以上方法。

另一种情况为:

 

在这种情况下,不存在所谓的相交点。


(2)当一个链表中有环,一个链表中没有环时,两个链表必不相交。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值