题目:160. 相交链表
难度:EASY
思路
主要难点在于如何进行节点之间的对应。两条链表长度不定长,如何找到需要对比的节点至关重要。
我们从后往前看,我们需要对比的节点有什么特点。一个最大的特点就是后面的节点数相同。这就是我们的突破口。
解决这个问题,有两种方案。
第一种,遍历两个链表,计算出节点数,然后将节点数多的链表向后平移;第二种,定义两个指针,分别先后遍历两个链表。
代码
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {// p1 指向 A 链表头结点,p2 指向 B 链表头结点ListNode *p1 = headA, *p2 = headB;while (p1 != p2) {// p1 走一步,如果走到 A 链表末尾,转到 B 链表if (p1 == nullptr) p1 = headB;else p1 = p1->next;// p2 走一步,如果走到 B 链表末尾,转到 A 链表if (p2 == nullptr) p2 = headA;else p2 = p2->next;}return p1;}
};