一开始想到前面做的那题“找到单链表闭环”,所以思路是把两个链表连起来,那么合并处的节点必是闭环的第一个节点。但是后来发现题目说不能改变链表结构。。 于是转换思想,仍然是用两个指针去遍历,同步分别遍历两个链表,如果有共节点,总是会碰头的;如果无共节点,两个指针最终都会指向null。
class Solution
{public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB){if (!headA || !headB)return NULL;ListNode *p1 = headA;ListNode *p2 = headB;while (p1 != p2){p1 = p1 ? p1->next : headA;p2 = p2 ? p2->next : headB;}return p1;}
};