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!!!