一、基本思路
- 分别求出两个链表的长度n和m。
- 假设长链表的长度为n,短链表的长度为m,令长链表先移动n-m步。
- 经过步骤2之后两个链表尾部对齐,此时同时向后移动,并判断是否有相同的结点。
![](https://i-blog.csdnimg.cn/blog_migrate/9c879060a860619c5554721d70b1e337.png)
二、代码实现
#include <iostream>
#include <vector>
using namespace std;
// int **p和int *&p的区别
// **p是指向(*p)的指针
// *&p是(*p)的引用
// 不能定义指向引用的指针,因为引用本身并不是一个对象,只是一个别名
struct Node {
int val;
Node *next;
Node(int v) {
val = v;
next = nullptr;
}
};
// 通过vector新建链表
Node *NewList(vector<int> &arr) {
Node *dummyHead = new Node(-1);
Node *cur = dummyHead;
for(int i = 0; i < arr.size(); i++) {
Node *node = new Node(arr[i]);
cur->next = node;
cur = cur->next;
}
return dummyHead;
}
// 释放链表
void DeleteList(Node *head) {