一:题目
二:上码
class Solution {
public:
/**
思路:
1.因为是指针 所以我们比较指针是否相等就能代表后序序列是否相等。
2.我们需要将链表右对齐后方可继续比较,(因为长链表多余出来的部分是一定不会与短炼表相等)
3.那么我们是如何对齐呢? 求两个链表的长度,然后进行比较,
让长链表的指针指向和短链表一样的长度的位置
*/
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode*node1 = headA;
ListNode*node2 = headB;
int lenA = 0;
int lenB = 0;
while (node1 != NULL) {
node1 = node1->next;
lenA++;
}
while (node2 != NULL) {
node2 = node2->next;
lenB++;
}
//这时需要再进行一次赋值 因为node1 node2已经指向最后一个结点。
node1 = headA;
node2 = headB;
//如果我们执行这个if那么就是node2比较长,那么我们就交换node1和node2保证node1是最长的
if(lenA < lenB) {
swap(node1,node2);
swap(lenA,lenB);
}
int nums = lenA - lenB;
//将长链表缩小和短链表一样长
while (nums--) {
node1 = node1->next;
}
while(node1!=NULL) {
if(node1 == node2) return node1;
node1 = node1->next;
node2 = node2->next;
}
return NULL;
}
};