leetcode 160. 相交链表 简单 链表

题目:
在这里插入图片描述

分析:如果两个链表有相交的部分,那么需要让两个链表都走到相交的位置,但问题就出现了,相交前的长度可能是不一样的,怎么可以同时走到相交的位置呢。接着分析发现如果有相交的部分,那么相交后的部分,长度一定是一样的,也就是只有前面未相交的部分长度可能是不一样的,那么想到凑成总长度相同的话问题就得到解决了,怎么凑呢?
可以把前面未相交的部分互相拼接起来,怎么拼?
可以每个链表走到末尾的时候从头去走别人的链表,这样总长度一定是一样的,长度一样速度也一样,如果有相交的话必定能碰上,即使不相交,总长度也还是一样这个结论不变,那么会同时走到“末尾”null

代码:

/**
 * 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 headAA = headA;
        ListNode headBB = headB;
        while(headAA != headBB){
            headAA = headAA == null ? headB : headAA.next;
            headBB = headBB == null ? headA : headBB.next;
        }
        //headBB一样
        return headAA;
    }
}

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值