0
点赞
收藏
分享

微信扫一扫

LeetCode 面试题 02.07. 链表相交

whiteMu 2022-01-11 阅读 81

参考文章:链表相交,找出交点

思路:

这个问题最需要注意的地方在于,相交部分的链表节点地址是一样的,而不是仅节点数值相等,可以说是题意没有说清楚吧。思路是先分别求出两链表的长度,然后相减得到差值,将长度较长的链表先遍历到等同于差值数的地方,然后再两个链表同时遍历,看当前节点的地址是否相同,若不同则接着遍历,直到找到地址相同的节点或者遍历完两个链表。参考图解过程(图片转载自代码随想录):

在示例图中,链表A长度较长,与链表B的长度相差为4,所以让curA往右移动4个节点,然后再与curB一起移动并判断当前两指针所指的节点地址是否相同。

图片

图片

 本题Java代码:

/**
 * 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) {
        int lenA = 0, lenB = 0;
        ListNode rn = headA;
        while(rn != null){
            rn = rn.next;
            lenA++;
        }
        rn = headB;
        while(rn != null){
            rn = rn.next;
            lenB++;
        }
        int gap;
        ListNode cur1, cur2;
        if(lenA > lenB){
            gap = lenA - lenB;
            cur1 = headA;
            cur2 = headB;
        }else{
            gap = lenB - lenA;
            cur1 = headB;
            cur2 = headA;
        }
        while(gap--!=0){
            cur1 = cur1.next;
        }
        while(cur1 != null){
            if(cur1 == cur2){
                return cur1;
            }else{
                cur1 = cur1.next;
                cur2 = cur2.next;
            }
        }
        return null;
    }
}
举报

相关推荐

0 条评论