相交链表

题目分析:
暴力解法:

计算链表的长度:首先我们需要知道链表 A 和链表 B 的长度。因为在开始比较两个链表是否相交之前,我们需要确保它们有相同的起始点。从长度上来说,两个链表的交点一定会出现在它们后续部分的某个地方。如果两个链表的长度不同,那么我们可以通过调整链表的头节点来使它们有相同的比较起点。对齐链表的起始位置:假设链表 A 比链表 B 长
len1 - len2个节点,那么我们可以让链表 A 从第len1 - len2个节点开始遍历;如果链表 B 比链表 A 长,那么我们让链表 B 从第len2 - len1个节点开始遍历。这样我们就确保了两个链表的后续部分从相同的节点开始比较。同时遍历两个链表:在对齐了起始位置之后,我们就可以同步地遍历两个链表。如果两个链表在某个节点相遇,那么这个节点就是它们的交点。如果遍历结束后还没有相遇,就说明两个链表没有交点。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode cur1 = headA;
ListNode cur2 = headB;
int len1 = 0, len2 = 0;
while (cur1 != null) {
len1++;
cur1 = cur1.next;
}
while (cur2 != ) {
len2++;
cur2 = cur2.next;
}
len1 - len2;
(len < ) {
headA;
headA = headB;
headB = tmp;
len = len2 - len1;
}
(len != ) {
headA = headA.next;
len--;
}
(headA != && headB != ) {
(headA == headB) {
headA;
}
headA = headA.next;
headB = headB.next;
}
;
}
}










