Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3
begin to intersect at node c1.
Notes:
- If the two linked lists have no intersection at all, return
null
. - The linked lists must retain their original structure after the function returns.
- You may assume there are no cycles anywhere in the entire linked structure.
- Your code should preferably run in O(n) time and use only O(1) memory.
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA == null || headB == null) return null; ListNode a = headA, b = headB; int m = 0; while(a != null) { m++; a = a.next; } int n=0; while(b != null) { n++; b = b.next; } a = headA; b = headB; while(m>n) { m--; a = a.next; } while(n>m) { n--; b = b.next; } while(a != null) { if(a == b) return a; a = a.next; b = b.next; } return null; }
重构了一下代码:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { int lenA = length(headA), lenB = length(headB); if(lenA > lenB) return getIntersectionNode(headA, lenA, headB, lenB); return getIntersectionNode(headB, lenB, headA, lenA); } private int length(ListNode head) { int len = 0; while(head != null) { len++; head = head.next; } return len; } private ListNode getIntersectionNode(ListNode a, int m, ListNode b, int n) { for(int i=0; i<m-n; i++) a = a.next; while(a != null && b != null) { if(a == b) return a; a = a.next; b = b.next; } return null; }
相关推荐
javascript js_leetcode题解之160-intersection-of-two-linked-lists.js
python python_leetcode题解之160_Intersection_of_Two_Linked_Lists.py
160-相交链表:intersection-of-two-linked-lists 206-反转一个单链表:reverse-linked-list 20-有效的括号:valid-parentheses 150-逆波兰表达式求值:evaluate-reverse-polish-notation 155-最小栈:min-stack Tree ...
leetcode中文版 LeetCode/Cpp 本人刷题记录在此,包含题意理解与算法思路,包含在Cpp文件内部注释,后续会持续更新。 有不懂的可以联系ji648513181,同时也欢迎志同道合O的朋友一起...160.Intersection of Two Linke
leetcode 2 sum c LeetCode 帮助文档 帮助文档存放在Help文件夹下。 文件名 文件描述 链接 complexitypython.txt Python的一些常规操作的复杂度统计 题目清单 Array(数组) ID Difficulty Title Java Python 1 Easy ...
231 | [Power of Two](https://leetcode.com/problems/power-of-two/) | [C++](./C++/power-of-two.cpp) [Python](./Python/power-of-two.py) | _O(1)_ | _O(1)_ | Easy | LintCode | 260 | [Single Number III]...
leetcode 盒子包装leetcode leetcode 上的解决方案 # 问题 关联 1 一维数组的运行总和 2 子矩形查询 3 洗牌 4 好的对数 5 拥有最多糖果的孩子 ...lcc-march2021/intersection-of-two-linked-lists 32 lcc-
leetcode 2 sum c LeetCode 贵有恒,何必三更起五更睡;最无益,只怕一日暴十寒。 我的个人网站: 分享技术,乐享生活:Jack Cui公众号每周五推送“程序员欢乐送”系列资讯类文章,欢迎您的关注! 帮助文档 帮助文档...
leetcode 2 sum c LeetCode 贵有恒,何必三更起五更睡;最无益,只怕一日暴十寒。 我的个人网站: 分享技术,乐享生活:Jack Cui公众号每周五推送“程序员欢乐送”系列资讯类文章,欢迎您的关注! 帮助文档 帮助文档...
3. **链表操作**:如“两链表的交点”(Intersection of Two Linked Lists),需要找到两个链表的第一个公共节点。 4. **树结构**:如“二叉树的最近公共祖先”(Lowest Common Ancestor of a Binary Tree),需要找到...
例如,“两链表的交点”(Intersection of Two Linked Lists)要求找出两个链表的第一个公共节点。 3. **字符串(Strings)**:处理字符串的拼接、查找、替换等问题。如“无重复字符的最长子串”(Longest ...
"两链表的第一个公共节点"(Intersection of Two Linked Lists)就是一个实例。 4. **二叉树**:二叉树结构常用于搜索和排序,LeetCode 中有许多涉及遍历、平衡、构造和修剪的问题。"二叉树的最大路径和"(Maximum ...
例如,"两链表的交点"(Intersection of Two Linked Lists)要求找到两个链表的交点,或者"删除链表中的节点"(Remove Nth Node From End of List)需要删除链表的指定位置节点。 3. **字符串**:字符串处理题目...
2. **链表**:链表数据结构在LeetCode中也占据重要地位,如"删除链表中的元素"(Remove Element)和"两链表相交"(Intersection of Two Linked Lists)。Swift虽然没有内置链表,但开发者可以自定义节点结构体来模拟...
"两链表的交叉点"(Intersection of Two Linked Lists)是一道常见的链表题目。 4. **树**:涉及二叉树、平衡二叉树、红黑树等,题目涵盖遍历、搜索、构造等。"二叉树的最大路径和"(Maximum Depth of Binary Tree...
例如,Reverse Linked List(反转链表)和Intersection of Two Linked Lists(两个链表的交集)等题目,都需要对链表进行操作。 3. 栈与队列:栈具有后进先出(LIFO)特性,队列则遵循先进先出(FIFO)原则。例如,...
3. **链表**:链表问题考察了指针操作和递归能力,如"两链表的交点"(Intersection of Two Linked Lists)需要找到两个链表的第一个公共节点。 4. **栈和队列**:这两个数据结构常用于处理层次遍历和逆序操作。...