求链表的公共结点
- 1.题目
- 2.详细的图示
- 3.详细注释和代码实现
1.题目
2.详细的图示
3.详细注释和代码实现
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {//定义两个表示长度的指针,让它们指向headA和headB//我们暂时无法知道哪部分链表长,我们暂且这样定义ListNode pl = headA;ListNode ps = headB;//定义两个长度,来表示以后谁先走差值步int len1 = 0;int len2 = 0;//1.求两个链表的长度while(pl != null){len1++;pl = pl.next;}while(ps != null){len2++;ps = ps.next;}//如果本身就是len1的长度大于len2呢?//我们为了求长度,将pl和ps置为了空pl = headA;ps = headB;//我们在求完长度以后,就要比较哪个链表的长度长int len = len1-len2;if(len < 0){//说明len1的长度小于len2pl = headB;ps = headA;len = len2-len1;}//2.长度长的先走差值步while(len != 0){pl = pl.next;len--;}//3.两个链表现在长度一致,要一起运动while(pl != ps){pl = pl.next;ps = ps.next;}//4.相遇的就是公共结点//那么如果没有相遇点呢?if(pl == null){return null;}return pl;}
}
找公共结点也得需要考虑特殊情况,希望大家能够跟随博主的脚步,一起学习数据结构.