记录两种思路:
- 按照链表的观点,找公共结点,可以利用双指针的思想实现(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; }