题目
输入两个链表,找出它们的第一个公共节点。
交点就是8
思路
1、使用双指针的方式风别指向其中一条链表
2、当一个链表到尾巴的时候,将该指针重新指向另一条指针的头
3、以此类推
4、那么当两个人相当的长度走到的时候就是交点位置了
代码和注释
法一:使用同速度指针
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
class Solution {
// 使用双指针
ListNode getIntersectionNode(ListNode headA, ListNode headB) {
// 1、定义双指针
ListNode p1 = headA;
ListNode p2 = headB;
while(p1 != p2){
// 2、开始迭代
if(p1 == null){
p1 = headB;
}else{
p1 = p1.next;
}
if(p2 == null){
p2 = headA;
}else{
p2 = p2.next;
}
}
return p2;
}
}
2、使用快慢指针
计算出两链表的长度,然后求差,然后让快指针先走,然后再一起走
总结
1、技巧:双指针
2、最好判断一下两条链表是否相交
3、原来代码还能说出这么浪漫的话
太浪漫了 两个结点不断的去对方的轨迹中寻找对方的身影,只要二人有交集,就终会相遇❤