记录两种思路:

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