其他分享
首页 > 其他分享> > leetcode面试题 02.07. 链表相交

leetcode面试题 02.07. 链表相交

作者:互联网

一:题目

在这里插入图片描述
在这里插入图片描述

二:思路

1.这道题我们是需要找到一个结点,并且从这个结点往后的结点都相等
2.我们需要将两个链表 右对齐
3.然后将长链表的指针移动到和短链表头结点相同的位置
4.接下来就是比较指针,当一个指针相同也就意味着往后的结点的数值也相等

三:上码

/**
 * 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) {
        /**
         思路:1.这道题我们是需要找到一个结点,并且从这个结点往后的结点都相等
              2.我们需要将两个链表 右对齐
              3.然后将长链表的指针移动到和短链表头结点相同的位置
              4.接下来就是比较指针,当一个指针相同也就意味着往后的结点的数值也相等
        */

        ListNode* node1 = headA;
        ListNode* node2 = headB;

        //求取链表的长度是为了右对齐
        int lenA = 0;
        int lenB = 0;

        while(node1 != NULL){//求链表A的长度
            node1 = node1->next;
            lenA++;
        }

        while(node2 != NULL){//求取链表B的长度
            node2 = node2->next;
            lenB++;
        }

        node1 = headA;//因为上方的操作让node1,node2已经指向了NULL
        node2 = headB;

        //我们让node1  lenA为最长的长度
        if(lenB > lenA){
            swap(lenA,lenB);
            swap(node1,node2);
        }
        
        int poor = lenA - lenB;
        //让长链表的指针和短链表首节点位置相同  即是(右对齐)
        while(poor--){
            node1 = node1->next;
        }

        //寻找相同的指针(只要指针相同那么指针往后的结点所对应的数值也相等)
        while(node1 != NULL){
            if(node1 == node2){
                return node1;
            }

            node1 = node1->next;
            node2 =  node2->next;
        }

        return NULL;
    }
};

在这里插入图片描述
渣渣杰又水了一道 这个题有意思的是我们需要理解 比较的是指针相等(当指针相等的时候我们就可以知道其往后的数值也就相等了),这可比数组牛逼多了,数组还得一个一个比较,链表yyds!!!

标签:面试题,ListNode,结点,链表,node1,node2,leetcode,指针
来源: https://blog.csdn.net/qq_48508278/article/details/122293894