Intersection of Two Linked Lists——经典问题
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.
开始想道用栈来做,先入栈,然后出栈比较直接就出结果了,但是题目说只能利用一个空间,所以栈的方法不行了。
看网上的答案,没想到这么简单,暴力解法,什么算法、数据结构都没用,题刷多了,脑袋都僵了,一直以为要用什么算法来做呢。。。。
思路:
查找两个链表的第一个公共节点,如果两个节点的尾节点相同,肯定存在公共节点
方法: 长的链表开始多走 (h1的数量 - h2的数量)步,然后和短链表同步往下走,遇到的第一个相同的节点就是最早的公共节点
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if(headA==NULL||headB==NULL)return NULL; ListNode *flagA=headA;ListNode *flagB=headB;int countA=1;int countB=1;while(flagA->next!=NULL){countA++;flagA=flagA->next;}while(flagB->next!=NULL){countB++;flagB=flagB->next;}if(flagA!=flagB)return NULL;else{int diff=abs(countA- countB);if(countA>=countB){flagA=headA;flagB=headB;}else{flagA=headB;flagB=headA;}while(diff){flagA=flagA->next;diff--;}while(flagA!=flagB){flagA=flagA->next;flagB=flagB->next;}return flagA;}} };
转载于:https://www.cnblogs.com/qiaozhoulin/p/4758718.html
Intersection of Two Linked Lists——经典问题相关推荐
- [LeetCode] Intersection of Two Linked Lists 求两个链表的交点
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- LeetCode(160): Intersection of Two Linked Lists
Intersection of Two Linked Lists: Write a program to find the node at which the intersection of two ...
- [Swift]LeetCode160. 相交链表 | Intersection of Two Linked Lists
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- Intersection of Two Linked Lists 解答
Question Write a program to find the node at which the intersection of two singly linked lists begin ...
- LeetCode Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- 【leetcode】Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- [LeetCode]--160. Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- 【LeetCode从零单排】No.160 Intersection of Two Linked Lists
题目 Write a program to find the node at which the intersection of two singly linked lists begins. For ...
最新文章
- 大数据-07-Spark之流数据
- 20190421-那些年使用过的CSS预处理器(CSS Preprocessor)之Sass and Less
- blog项目中遇到的问题及解决
- 推荐:解析“extern”
- html5难点,学习HTML5的难点是什么?
- java sybase存储过程_sybase存储过程-----不定时更新
- 经纬度绘图_Python气象绘图教程(二十二)—mpl_toolkits.axes_grid1
- 微信php 客户端cookie,微信内置浏览器中的cookie很诡异呀
- Golang学习(12)——regex包
- 03-SSH server config
- 怎样使用计算机定时关机,如何设置电脑定时关机
- 相亲交友小程序的盈利点
- 迅雷自动升级解决方法
- 熟悉Linux基本操作
- LimeSDR官方系列教程(三):一个实际测试例子
- 笔记本计算机风扇声音大怎么办,教你怎么从解决笔记本风扇狂转、噪音过大!-电脑风扇声音大怎么办...
- nodejs中cmd命令大全
- 外行假装内行,我也来谈谈SAP BAPI和BADI
- 2022年门座式起重机司机考试模拟100题及模拟考试
- 盘点Golang测试相关库