自学内容网 自学内容网

相交链表(给你两个链表,找出它们的第一个公共结点)的实现与讲解

一:题目

二:思路讲解

1:应该是先判断是否相交。

2:相交就计算出相交前的两条链表的长度差距

3:让长的那一条链表先走长度的差距,这样会距离交点的距离相等,然后再对两条链表的节点对应着去比较。

第一步:判断是否相交

两个链表如果相交,他们的尾节点一定相同,因为,一但有一个相交节点,比如图中的c1,那之后的链表一定是一致的,因为一个节点只能指向一个节点,所以尾节点相同则两个链表一定相交! 

第二步:计算长度差距,并让长的链表往后走差距长度就一样长了

因为:长度的差距一定是在相交节点之前就决定了的,因为相交节点之后的链表完全相同。

 代码展示:

注意:

1:lenA为什么为1,因为while(curA->next)只能让cur停留在尾节点上,所以尾节点并没有经过,lenA也少一个+1,lenB同理。

那为什么不while(curA) 呢,这样lenA就是正确的,因为下面的尾节点比较的时候,curA和curB已经来到了尾节点的后一个节点,这样的话无法比较尾节点,除非在计算长度的时候,还要保留前一个节点的指针,这样比较麻烦,所以宁愿lenA,lenB赋值为1.

2:abs函数为计算两个值的差值的绝对值

3:longlist  就是我们希望的长的链表, shortlist就是我们希望的短的链表

4:最后出循环的时候,代表两个节点相同了,这时候返回longlist和shortlist都可以


原文地址:https://blog.csdn.net/shylyly_/article/details/138669787

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!