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——经典问题相关推荐

  1. [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 ...

  2. 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 ...

  3. [Swift]LeetCode160. 相交链表 | Intersection of Two Linked Lists

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. Intersection of Two Linked Lists 解答

    Question Write a program to find the node at which the intersection of two singly linked lists begin ...

  5. 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 ...

  6. 【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 ...

  7. [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 ...

  8. Intersection of Two Linked Lists

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  9. 【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 ...

最新文章

  1. 大数据-07-Spark之流数据
  2. 20190421-那些年使用过的CSS预处理器(CSS Preprocessor)之Sass and Less
  3. blog项目中遇到的问题及解决
  4. 推荐:解析“extern”
  5. html5难点,学习HTML5的难点是什么?
  6. java sybase存储过程_sybase存储过程-----不定时更新
  7. 经纬度绘图_Python气象绘图教程(二十二)—mpl_toolkits.axes_grid1
  8. 微信php 客户端cookie,微信内置浏览器中的cookie很诡异呀
  9. Golang学习(12)——regex包
  10. 03-SSH server config
  11. 怎样使用计算机定时关机,如何设置电脑定时关机
  12. 相亲交友小程序的盈利点
  13. 迅雷自动升级解决方法
  14. 熟悉Linux基本操作
  15. LimeSDR官方系列教程(三):一个实际测试例子
  16. 笔记本计算机风扇声音大怎么办,教你怎么从解决笔记本风扇狂转、噪音过大!-电脑风扇声音大怎么办...
  17. nodejs中cmd命令大全
  18. 外行假装内行,我也来谈谈SAP BAPI和BADI
  19. 2022年门座式起重机司机考试模拟100题及模拟考试
  20. 盘点Golang测试相关库

热门文章

  1. 赫夫曼树建立c语言源程序编译结果详细解释,哈夫曼树的建立与实现最终版(备份存档)...
  2. 4.5.3 BGP协议
  3. CAMB中查看波矢的取值范围
  4. 从源码分析DEARGUI之add_window
  5. IdentityServer Topics(2)- 定义资源
  6. Oracle基本操作(二)
  7. 使用netstat检测及监测网络连接
  8. List-style-type属性失效
  9. 使用vmware克隆CentOS后网卡名称修改(强迫症)
  10. 我与技术------2012程序之路