题目
链接:160. 相交链表 - 力扣(LeetCode)
思路
是指针相同,先求出两个链表的长度以及差值,让curA移动到和curB末尾对齐的位置,然后就可以遍历比较是否相同
代码:
/**
* 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) {
ListNode* curA = headA;
ListNode* curB = headB;
int lenA = 0,lenB = 0;
//求链表A的长度
while(curA != NULL){
lenA++;
curA = curA->next;
}
//求链表B的长度
while(curB != NULL){
lenB++;
curB = curB->next;
}
curA = headA;
curB = headB;
//让curA成为最长链表的头lenA为其长度
if(lenB > lenA){
swap(lenA, lenB);
swap(curA,curB);
}
//求长度差
int gap = lenA - lenB;
//让链表A和B的末位置对齐
while(gap--){
curA = curA->next;
}
//遍历curA和curB,遇到相同则直接返回
while(curA != NULL){
if(curA == curB){
return curA;
}
curA = curA->next;
curB = curB->next;
}
return NULL;
}
};