记录两种思路:
- 按照链表的观点,找公共结点,可以利用双指针的思想实现(a+c+b=b+c+a,其中a、b分别为两个链表前缀的长度,c为公共后缀的长度)。
- 把链表看成有向图,公共后缀结点其实就是入度为2的结点。
这里提供第二种思路的代码
//
// Created by Zed on 2024/2/9.
//
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 1e6 + 100;
int in[MAXN];//统计结点的入度
int main() {
int s1, s2, n;
while (cin >> s1 >> s2 >> n) {
for (int i = 0; i < MAXN; ++i) {
in[i] = 0;
}
for (int i = 0; i < n; ++i) {
int x;
string tmp;
cin >> x >> tmp >> x;//只需要入度信息,其他信息无用
in[x]++;
}
bool f= false;
for (int i = 0; i < MAXN; ++i) {
if(in[i]==2){
f= true;
printf("%05d\n",i);//5位数字
}
}
if(!f){
cout<<-1<<endl;
}
}
return 0;
}

京公网安备 11010502036488号