/*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&&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 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中元素:"<
我能输入A,B集合的元素,但是最后打印出来的结果是这样的
链表的第一个元素没有被遍历到,所以忽略了。
不知道你这个问题是否已经解决, 如果还没有解决的话: