初冀 2023-03-12 22:50 采纳率: 61%
浏览 46
已结题

单循环链表求交集出问题了


/*2.18假设递增有序的带头结点的单循环链表A、B分别表示两个集合,
设计算法以求解A= A∪B,并分析算法的时间复杂度。
*/
#include <iostream>
#include<stdlib.h>
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&&pa->next!=NULL&&pb->next!=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->data<pb->next->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->next;
        while (p != R->next&&p!=NULL) {
            cout << p->data << " ";
            p = p->next;
        }
    }
    int main() {
        node* A, * B;
        initiallist(A);
        initiallist(B);
        cout << "输入A中元素:"<<endl;
        createList(A);
        cout << "输入B中元素:"<<endl;
        createList(B);
        listUnion(A, B);
        printList(A);
        return 0;
    }


我能输入A,B集合的元素,但是最后打印出来的结果是这样的

img


想问一下哪里出问题了,我觉得应该是listUnion函数有问题,但是我实在找不出来为什么

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-03-12 23:52
    关注

    链表的第一个元素没有被遍历到,所以忽略了。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月30日
  • 创建了问题 3月12日

悬赏问题

  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 关于#c语言#的问题:我在vscode和codeblocks中编写c语言时出现打不开源文件该怎么办
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询