题目描述
给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。
解题方法
链表合并,双指针
比如 4 1 8 4 5 5 0 1 8 4 5
以及 5 0 1 8 4 5 4 1 8 4 5
很明显可以看出后面的8 开始的8 4 5的地址都是重复的了,即为相交点。
/**
* 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==nullptr || headB==nullptr) return NULL;
ListNode *a = headA;
ListNode *b = headB;
ListNode *c = nullptr;
while(a!=b){
if(!a) a = headB;
else a = a->next;
if(!b) b = headA;
else b = b->next;
}
return a;
}
};
执行用时 :60 ms, 在所有 C++ 提交中击败了51.20%的用户
内存消耗 :16.9 MB, 在所有 C++ 提交中击败了100.00%的用户