编写一个程序,找到两个单链表相交的起始节点。

我的办法是把A链表节点全断了,这样B的尽头就是相交的节点了。但是题目要求不改变原本链表。所以我的办法不行


双指针法

https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/solution/shuang-zhi-zhen-fa-lang-man-xiang-yu-by-ml-zimingm/

做法:我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。这样,当它们相遇时,所指向的结点就是第一个公共结点。

评论:太6了,我的理解: 两个链表长度分别为L1+C、L2+C, C为公共部分的长度,按照楼主的做法: 第一个人走了L1+C步后,回到第二个人起点走L2步;第2个人走了L2+C步后,回到第一个人起点走L1步。 当两个人走的步数都为L1+L2+C时就两个家伙就相爱了

之前有一道题也是用的类似方法,剑指offer22题,链表中倒数第k个节点。

给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.

https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/

做法:两个指针,前指针先走k步了后指针出发,前指针走到头,后指针停下。


--

这类题给我感觉像小学桌子上站个小猫,地上站个大狗然后谁比谁高多少,让你求谁多高那种题。