两个循环单链表进行交集为什么打印不出最终结果


/*2.18假设递增有序的带头结点的单循环链表A、B分别表示两个集合,
设计算法以求解A= A∪B,并分析算法的时间复杂度。
*/
#include 
#include
using namespace std;
#define max 100
typedef int element;
typedef struct sNode {
    element data;
    struct sNode* next;
}node, * linklist;
void initiallist(node*& L) {
    L = new node;
    L->next = L;
}
/*void listLocate(node* L, element x, node*& p) {
    p = L->next->next;
    while(p != L->next) {
        if (p->data == x)
            break;
        else
        p = p->next;
     }
    if (p == L->next)
        p = NULL;
}*/
 
void listUnion(node* &A, node* B) {//设置A,B的尾指针
    node* pa, * pb, * u;
    pa = A->next;// 头指针
    pb = B->next;
    while (pa != NULL && pb != NULL) {
        if (pa->next->data > pb->next->data)//pb插在pa前
        {
            u = new node;
            u->data = pb->next->data;
            u->next = pa->next;
            pa->next = u;
            if (A->next->next == u)
                A->next = u;
            pa = pa->next;
            pb = pb->next;
        }
        else if (pa->next->data == pb->next->data)
        {
            pa = pa->next;
            pb = pb->next;
        }
        else {//pa->next->datanext->data, pb插在pa后
            u = new node;
            u->data = pb->next->data;
            u->next = pa->next->next;
            pa->next->next = u;
            if (A->next==u)
            A = u->next;
        }
    }
    }
    void createList(node * &L) {
        element x;
        node* p,*R;
        L = new node;
        L->next = NULL;
        R = L;
        cout << "请输入第一个元素数据(整数,9999退出):" << endl;
        cin >> x;
        while (x != 9999) {
            p = new node;
            p->data = x;
            p->next = NULL;     //尾插接入结点
            R->next = p;
            R = p;
            cout << "输入下一个元素数据(整数,9999退出):";
            cin >> x;
        }
    }
    void printList(node* &R) {
        node* p;
        p = R->next ;
        while (p != R->next) {
            cout << p->data << " ";
            p = p->next;
        }
    }
    int main() {
        node* A, * B;
        initiallist(A);
        initiallist(B);
        cout << "输入A中元素:"<

代码如上,为什么输入数据的过程正常,但是打印不出来A数组最终元素


while (pa != NULL && pb != NULL) {
        if (pa->next->data > pb->next->data)
为何判断pa->next->data,而不是pa->data呢?
while条件只确保pa和pb不为空,但无法保障pa->next和pb->next不为空啊,程序肯定崩溃的啊
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^