面试常考题相交链表
题目已经保证链表中不存在环的问题,那就很好写了。先让两个链表的指针的位置相对一样,然后同时向右移动,直到两指针相等,详细注释已经放在代码里了,相信对大家有所帮助
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* curA = headA;
ListNode* curB = headB;
//先求两个链表长度
int lenA = 0, lenB = 0;
while(curA != NULL) {
lenA++;
curA = curA->next;
}
while(curB != NULL) {
lenB++;
curB = curB->next;
}
//重新指向新的头节点
curA = headA;
curB = headB;
//将链表长的强行赋值给cur
if(lenB > lenA) {
swap(lenA, lenB);
swap(curA, curB);
}
//算出两链表的长度差,将链表的起始位置相同
int len = lenA - lenB;
while(len--) {
curA = curA->next;
}
//判断两链表是否相交
while(curA) {
if(curA == curB) {
return curA;
}
curA = curA->next;
curB = curB->next;
}
return NULL;
}
};