首页 > 其他分享 >leetcode-160-easy

leetcode-160-easy

时间:2022-11-30 21:46:12浏览次数:41  
标签:node head intersected two lists easy nodes 160 leetcode

Intersection of Two Linked Lists

Given the heads of two singly linked-lists headA and headB, return the node at which the two lists intersect. If the two linked lists have no intersection at all, return null.

For example, the following two linked lists begin to intersect at node c1:


The test cases are generated such that there are no cycles anywhere in the entire linked structure.

Note that the linked lists must retain their original structure after the function returns.

Custom Judge:

The inputs to the judge are given as follows (your program is not given these inputs):

intersectVal - The value of the node where the intersection occurs. This is 0 if there is no intersected node.
listA - The first linked list.
listB - The second linked list.
skipA - The number of nodes to skip ahead in listA (starting from the head) to get to the intersected node.
skipB - The number of nodes to skip ahead in listB (starting from the head) to get to the intersected node.
The judge will then create the linked structure based on these inputs and pass the two heads, headA and headB to your program. If you correctly return the intersected node, then your solution will be accepted.

Example 1:

Input: intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
Output: Intersected at '8'
Explanation: The intersected node's value is 8 (note that this must not be 0 if the two lists intersect).
From the head of A, it reads as [4,1,8,4,5]. From the head of B, it reads as [5,6,1,8,4,5]. There are 2 nodes before the intersected node in A; There are 3 nodes before the intersected node in B.
- Note that the intersected node's value is not 1 because the nodes with value 1 in A and B (2nd node in A and 3rd node in B) are different node references. In other words, they point to two different locations in memory, while the nodes with value 8 in A and B (3rd node in A and 4th node in B) point to the same location in memory.
Example 2:

Input: intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
Output: Intersected at '2'
Explanation: The intersected node's value is 2 (note that this must not be 0 if the two lists intersect).
From the head of A, it reads as [1,9,1,2,4]. From the head of B, it reads as [3,2,4]. There are 3 nodes before the intersected node in A; There are 1 node before the intersected node in B.
Example 3:

Input: intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
Output: No intersection
Explanation: From the head of A, it reads as [2,6,4]. From the head of B, it reads as [1,5]. Since the two lists do not intersect, intersectVal must be 0, while skipA and skipB can be arbitrary values.
Explanation: The two lists do not intersect, so return null.
Constraints:

The number of nodes of listA is in the m.
The number of nodes of listB is in the n.
1 <= m, n <= 3 * 104
1 <= Node.val <= 105
0 <= skipA < m
0 <= skipB < n
intersectVal is 0 if listA and listB do not intersect.
intersectVal == listA[skipA] == listB[skipB] if listA and listB intersect.
Follow up: Could you write a solution that runs in O(m + n) time and use only O(1) memory?

思路一:题目写的太模糊了,给的例子也不好。简单来说就是求两条链表尾部相同的地方,用两个栈判断

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    Deque<ListNode> stack1 = new ArrayDeque<>();
    while (headA != null) {
        stack1.push(headA);
        headA = headA.next;
    }
    Deque<ListNode> stack2 = new ArrayDeque<>();
    while (headB != null) {
        stack2.push(headB);
        headB = headB.next;
    }

    ListNode node = null;
    while (!stack1.isEmpty() && !stack2.isEmpty()) {
        ListNode p1 = stack1.pop();
        ListNode p2 = stack2.pop();
        if (p1 == p2) {
            node = p1;
        } else {
            return node;
        }
    }
    return node;
}

标签:node,head,intersected,two,lists,easy,nodes,160,leetcode
From: https://www.cnblogs.com/iyiluo/p/16939845.html

相关文章

  • leetcode-111-easy
    MinimumDepthofBinaryTreeGivenabinarytree,finditsminimumdepth.Theminimumdepthisthenumberofnodesalongtheshortestpathfromtherootnode......
  • 力扣 leetcode 162. 寻找峰值
    问题描述峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即......
  • 力扣 leetcode 153. 寻找旋转排序数组中的最小值
    问题描述已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4......
  • 力扣 leetcode 33. 搜索旋转排序数组
    问题描述整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k......
  • 力扣 leetcode 895. 最大频率栈
    问题描述设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。实现FreqStack类:FreqStack()构造一个空的堆栈。voidpush(intval)将一......
  • IDEA使用EasyCode插件
    1、目的快速生成controller、mapper、service、serviceImpl、mappers.xml文件2、安装EasyCode插件File|Settings|Plugins搜索EasyCode,点击安装即可。3、配置模板......
  • 常用功能系列---【使用EasyCaptcha快速生成验证码】
    使用EasyCaptcha快速生成验证码1.引入pom坐标<!--验证码--><dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId>......
  • easylogging++的那些事(四)源码分析(二)日志记录宏(四)VERBOSE日志宏
    目录CVLOG宏宏展开源码剖析CVLOG_EVERY_N宏宏展开源码剖析CVLOG_AFTER_N宏宏展开源码剖析CVLOG_N_TIMES宏宏展开源码剖析VLOG宏DCVLOG宏DVLOG宏VLOG_EVERY_N宏VLOG......
  • [LeetCode] 1207. Unique Number of Occurrences
    Givenanarrayofintegers arr,return true ifthenumberofoccurrencesofeachvalueinthearrayis unique,or false otherwise.Example1:Input:arr......
  • 初次邂逅 EasyExcel
    前言由于工作原因,有这种需求,就是把数据库中的数据导出成Excel表格,同时,也得支持人家用Excel表格导入数据到数据库。当前项目也是在用EasyExcel,所以我不得不学啦!以前......