一:题目
二:思路
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已经指向了NULLnode2 = 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!!!