题目来源:
leetcode题目,网址:面试题 02.07. 链表相交 - 力扣(LeetCode)
解题思路:
双指针。A 指针指向 headA,B指针指向 headB,将两指针同步后移。若 A 指针与 B 指针皆为空,则链表皆为空;若 A 指针与 B 指针指向同一节点,该节点结即为所求;若 A 指针为空,B 指针不空,将 A 指针指向headB;若 B 指针为空,A 指针不空,B指向headA。
解题代码:
- /**
- * 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 nullptr;
- }
- ListNode* A=headA;
- ListNode* B=headB;
- while(!(A==nullptr && B ==nullptr)){
- if(A==nullptr){
- A=headB;
- }
- if(B==nullptr){
- B=headA;
- }
- if(A==B){
- return A;
- }
- A=A->next;
- B=B->next;
- }
- return nullptr;
- }
- };
总结:
官方题解给出了两种解法 。第一种是哈希集合。使用哈希集合存储 某一链表节点,再遍历另一个进行判断。第二种是双指针。