是的,就是这么绝望,做过的题好久不做就又忘了。
进入这个领域太晚了,看见那么多大佬已经刷了几百道上千,只恨上学时候没有好好刷。然而种一棵树最早的时间是十年前,其次是现在。就此继续吧。
经典的寻找链表相交的开始节点。
https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
【解答】
用c代表两个链表相同的地方。a和b代表不同的地方。
链表1:a+c
链表2:b+c
那么首尾相交遍历两个链表,第一次相遇的地方就是相交最早的节点。
所以说力扣很多简单题很巧的,要先学习的。
(a+c+b)+c=(b+c+a)+c
当然,如果没有相交的部分,c就为空,等式也成立。
代码如下:
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode pA = headA;
ListNode pB = headB;
while(pA !=pB) {
pA = pA==null?headB:pA.next;
pB = pB==null?headA:pB.next;
}
return pA;
}
}