LeetCode Intersection of Two Linked Lists 解题报告

44 篇文章 0 订阅
43 篇文章 0 订阅
https://oj.leetcode.com/problems/intersection-of-two-linked-lists/
求两个链表的第一个公共节点,如果不存在公共节点的话就返回null。

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3

解题思路:
1)如果两个链表的最后一个节点一样,那么说明两个链表一定有交点。
2)分别求出两个链表的长度,然后对长度长的链表向前移动:LengA - LengB,将两个链表进行对齐,之后一起遍历,直到找到第一个相同的节点。

public class Solution {
    
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if(headA==null||headB==null) {
            return null;
        }
        int lengthA = 1;
        int lengthB = 1;
        
        ListNode iterA = headA;
        while(iterA.next!=null) {
            iterA = iterA.next;
            lengthA++;
        }
        
        ListNode iterB = headB;
        while(iterB.next!=null) {
            iterB = iterB.next;
            lengthB++;
        }
        
        if(iterA!=iterB) {
            return null;
        }
        
        if(lengthA>lengthB) {
            int tmp = lengthA - lengthB;
            while(tmp>0) {
                headA = headA.next;
                tmp--;
            }
        } else {
            int tmp = lengthB - lengthA;
            while(tmp>0) {
                headB = headB.next;
                tmp--;
            }
        }
        
        
        
        
        while(headA!=headB) {
            headA = headA.next;
            headB = headB.next;
        }
        
        return headA;
    }
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i+1, len(nums)): if nums[i] + nums[j] == target: return [i, j] ### 回答2: leetcode 第1题是"两数之和",题目要求在给定的整数数组中找到两个数,使它们的和等于一个目标值,并返回这两个数的索引。下面是使用哈希表解决这个问题的Python代码: ```python def twoSum(nums, target): # 创建一个空的哈希表 hashmap = {} # 遍历整个数组 for i, num in enumerate(nums): # 计算当前数字与目标值的差值 complement = target - num # 如果差值存在于哈希表中,则返回差值的索引和当前数字的索引 if complement in hashmap: return [hashmap[complement], i] # 将当前数字添加到哈希表中,索引作为键,数字作为值 hashmap[num] = i # 如果未找到符合条件的数字,则返回空列表 return [] ``` 这个算法的基本思想是,在遍历整个数组的过程中,先计算当前数字与目标值的差值,然后将差值与当前数字的索引存储在哈希表中。接下来,在遍历数组的过程中,如果差值存在于哈希表中,则说明找到了两个数的和等于目标值,直接返回这两个数的索引。如果遍历完成后仍未找到符合条件的数对,则返回空列表。这个算法的时间复杂度为 O(n),其中 n 为数组的长度。 ### 回答3: 题目描述:两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。 示例: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 思路:使用字典存储数组中的数字及其对应的下标,然后遍历数组找到与目标值的差值,如果差值也在字典中,说明找到了答案。 具体实现如下: ```python def twoSum(nums, target): # 创建一个字典存储数组中的数字及其对应的下标 num_dict = {} for i in range(len(nums)): # 计算与目标值的差值 complement = target - nums[i] # 如果差值也在字典中,说明找到了答案 if complement in num_dict: return [num_dict[complement], i] # 将数字及其对应的下标存入字典中 num_dict[nums[i]] = i return [] nums = [2, 7, 11, 15] target = 9 result = twoSum(nums, target) print(result) # 输出 [0, 1] ``` 以上就是 LeetCode 第1题的 Python 解题代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值