首页 > 其他分享 >leetcode.面试题 02.07. 链表相交

leetcode.面试题 02.07. 链表相交

时间:2024-04-05 23:29:05浏览次数:28  
标签:面试题 ListNode 相交 链表 headB headA 移动 leetcode

题目

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:
在这里插入图片描述

思路

假a在链表A上移动,b在链表B上移动,a移动完在B上开始,b移动完再A上开始。最终a移动的距离a + c + x,b移动的距离 b + c + y。可以看到a + c + x = b + c + y,即a + x = b + y ,a移动b距离,b移动a距离a,b指针就会相交,直接返回a,b相交时候a/b指针所指节点的位置。即使a,b没有相交的地方,返回的也是null。

在这里插入图片描述

实现

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
         
        //怎么保证a链表上的指针下次指到b链表? 一轮就行了 不用考虑
         ListNode a = headA;
         ListNode b = headB;
         
         while(a != b){
            a = a == null ? headB : a.next;
            b = b == null ? headA : b.next;
         }
        return a;
    }
}

标签:面试题,ListNode,相交,链表,headB,headA,移动,leetcode
From: https://blog.csdn.net/Nanki_/article/details/137412214

相关文章

  • Day1数组+链表
    数组while(不变量)--不变量循环704.二分查找https://leetcode.cn/problems/binary-search/题目要求数组升序无重复数字方法一-左闭右闭[]左闭右闭区间[left,right],若nums[middle]!=target,则边界一定不包含middle;用while循环,当找到了则直接返回,若没有则在while循......
  • C++链表小册子
    目录1.简记2.多说两句3.算法题1.简记对于C++链表类的创建,有以下简记:堆分配,new作为右值。返回指针。对象生命周期手动管理,需要显式删除(delete)ListNodedummy(0);栈分配,返回ListNode。仅在作用域内生效(和常见的初始化int一样)。要得到ListNode指针需要&取地址2.多说两句......
  • 【LeetCode刷题记录】简单篇-13-罗马数字转整数
    【题目描述】 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符数值I1V5X10L50C100D500M1000例如,罗马数字 2 写做 II ,即为两个并列的1。12 ......
  • Leetcode 无重复字符的最长子串
    powcai的滑动窗口解决问题:不断向后滑动窗口,出现重复元素,重新计算窗口,巧妙利用map来记录先前出现的元素的位置索引classSolution{publicintlengthOfLongestSubstring(Strings){//滑动窗口解决该问题intleft=0;intmax=0;Map......
  • Leetcode 412. Fizz Buzz
    给你一个整数n,找出从1到n各个整数的FizzBuzz表示,并用字符串数组answer(下标从1开始)返回结果,其中:answer[i]==“FizzBuzz”如果i同时是3和5的倍数。answer[i]==“Fizz”如果i是3的倍数。answer[i]==“Buzz”如果i是5的倍数。answer[i]......
  • LeetCode in Python 300. Longest Increasing Subsequence (最长递增子序列)
    求最长递增子序列是深度优先搜索(DFS)的一种应用,有两种比较好的方法可以解决。第一种是动态规划法,时间复杂度为O(n*n),即设置边界条件和更新迭代公式求解最优解。第二种使用二分查找将时间复杂度降为O(nlogn)。本文给出两种方法的实现代码及说明。示例:图1最长递增子序列输入......
  • LeetCode 13. 罗马数字转整数
    解题思路通过样例我们可以知道,将目标对应值和下一个目标对应值进行比较,如果小于,则sum=sum+目标对应值,如果大于,则sum=sum-目标对应值。最终的sum就是正确答案。相关代码classSolution{public:intromanToInt(strings){unordered_map<char,int>a;......
  • Python企业面试题2 —— 基础篇
    1.re的match和search区别?re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。re.search扫描整个字符串并返回第一个匹配成功的值。2.什么是正则的贪婪匹配?匹配一个字符串没有节制,能匹配多少就去匹配多少,直到没有匹配的为止。......
  • MySQL面试题系列-8
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。mysql的全复制、半复制、异步复......
  • LeetCode-142. 环形链表 II【哈希表 链表 双指针】
    LeetCode-142.环形链表II【哈希表链表双指针】题目描述:解题思路一:快慢指针判断是否有环见解题思路二:set()解题思路三:0题目描述:给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next......