6:シーケンスの交差(チェーンテーブル)c++を求めます


問題の説明:
先頭ノードを使用した単一チェーンテーブルのプログラミング:
2つのシーケンスがあり、それぞれ2つのセットを表します.
それらの交差を求めて出力します.
説明を入力:
1行目は、シーケンスAの情報を入力する.
1番目の整数n(0<=n<=100)は、n個の要素を共有し、その後n個の整数を表し、n個の要素を表すデータ
第1行は、シーケンスBの情報を入力する.
1番目の整数n(0<=n<=100)は、n個の要素を共有し、その後n個の整数を表し、n個の要素を表すデータ
出力の説明:
交差する要素シーケンスを出力します.出力フォーマットは例を示します.
交差が空の場合は「head->tail」を出力します.
交差する要素の順序は、シーケンスAの順序に従います.
例:
シーケンス:
A:5 3 2 7
B:1 3 5 8
交点は5と3であり,シーケンスAでは5が3の前にあるため,交点では5も3の前にある.
入力例:4 5 3 2 7
出力例:head->5->3->tail
#include
using namespace std;
struct ListNode
{
     
    int  data;
    struct ListNode *next;
};
ListNode *create(int arr[],int num)
{
     
    ListNode *head,*p,*r;
    head=new ListNode;
    head->next=NULL;
    r=head;
    for(int i=0;i<num;i++){
     
        p=new ListNode;
        p->data=arr[i];
        r->next=p;
        r=p;
    }
    r->next=NULL;
    return head;
}

int main()
{
     
    int n1,n2;
    cin>>n1;
    int arr1[100];
    for(int i=0;i<n1;i++)
        cin>>arr1[i];
    cin>>n2;
    int arr2[100];
    for(int i=0;i<n2;i++)
        cin>>arr2[i];


    ListNode *A=create(arr1,n1);
    ListNode *B=create(arr2,n2);

    ListNode *pa=A->next;
    ListNode *pb=B->next;
    cout<<"head-->";

    while(pa){
     
        while(pb){
     
            if(pa->data==pb->data)
               {
     
                  cout<<pa->data<<"-->";
                  break;
               }

                pb=pb->next;
        }
    pa=pa->next;
    pb=B->next;
    }
    cout<<"tail
"
; return 0; }