一:题目
二:思路
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!!!