LeetCode 面试题 02.07. 链表相交

面试题 02.07. 链表相交 力扣 题目跳转链接

思路参考:代码随想录 跳转链接


错误代码:

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) 
    {
        ListNode* fast;
        ListNode* slow;
        int sizeA=0,sizeB=0,gap=0;
        while(headA)   //很明显 这里headA又没有改变。 会一直循环下去!!!
        {sizeA++;}

        while(headB)
        {sizeB++;}
        gap=abs(sizeB-sizeA);

        if(sizeA>sizeB)
        { swap(headB,headB);}

        slow=headA;
        fast=headB;
        while(gap--)
        {
            fast=fast->next;
        }

        while(fast)
        {
            if(fast==slow)
            {
                return fast;
            }
            fast=fast->next;
            slow=slow->next;
        }
       return nullptr;
    }
};



错误记录2:

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) 
    {
        //假定B 长   A 短
        ListNode* fast=headB;
        ListNode* slow=headA;
        int sizeA=0,sizeB=0,gap=0;
        while(fast)    //fast 对应的是 B  sizeB 233、、、
        {sizeA++;
         fast=fast->next;
        }

        while(slow)
        {sizeB++;
        slow=slow->next;
        }
        gap=abs(sizeB-sizeA);
** //这里是不对的 。   题目要求:注意,函数返回结果后,链表必须 保持其原始结构 。
逻辑: 
        if(sizeA>sizeB)
        { swap(headA,headB);}

        slow=headA;
        fast=headB;

**
        while(gap--)
        {
            fast=fast->next;
        }

        while(fast)
        {
            if(fast==slow)
            {
                return fast;
            }
            fast=fast->next;
            slow=slow->next;
        }
       return nullptr;
    }
};

正确代码:

/**
 * 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) 
    {
        //假定 A 短  B 长  
        ListNode* slow=headA;
           ListNode* fast=headB;
        int sizeA=0,sizeB=0,gap=0;
        while(slow)
        {sizeA++;
         slow=slow->next;
        }

        while(fast)
        {sizeB++;
         fast=fast->next;
        }
        gap=abs(sizeB-sizeA);

           slow=headA;
        fast=headB;
        if(sizeA>sizeB)
        { swap(slow,fast);}

     
        while(gap--)
        {
            fast=fast->next;
        }

        while(fast)
        {
            if(fast==slow)
            {
                return fast;
            }
            fast=fast->next;
            slow=slow->next;
        }
       return nullptr;
    }
};
posted @ 2023-03-26 14:03  专心Coding的程侠  阅读(13)  评论(0编辑  收藏  举报