好像缺失了两个链表各自最后一个数,结果还有莫名的数,怎么改?
void createlistR(LNode *&L, LNode *&P)
{
int i;
LNode *s, *t;
P = (LNode *)malloc(sizeof(LNode));
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
P->next = NULL;
s = L;
for (i = 0; i < 10; i++)
{
t = (LNode *)malloc(sizeof(LNode));
t->data = 2 * i + 1;
s->next = t;
s = t;
}
s->next = NULL;
s = P;
for (i = 0; i < 5; i++)
{
t = (LNode *)malloc(sizeof(LNode));
t->data = 2 * i + 2;
s->next = t;
s = t;
}
s->next = NULL;
}
void mergelistF(LNode *A, LNode *B, LNode *&C) //头插法合并为递减链表
{
cout << "遍历数组A" << endl;
traveselist(A);
cout << "遍历数组B" << endl;
traveselist(B);
LNode *a1, *a2, *b1, *b2, *c;
C = (LNode *)malloc(sizeof(LNode));
C->next = NULL;
a1 = A;
a2 = A->next;
b1 = B;
b2 = B->next;
c = C;
while (a1->next != NULL && b1->next != NULL)
{
if (a1->next->data <= b1->next->data)
{
a1->next = c->next;
c->next = a1;
a1 = a2;
a2 = a2->next;
}
else
{
b1->next = c->next;
c->next = b1;
b1 = b2;
b2 = b2->next;
}
}
while (a1->next != NULL)
{
a1->next = c->next;
c->next = a1;
a1 = a2;
a2 = a2->next;
}
while (b1->next != NULL)
{
b1->next = c->next;
c->next = b1;
b1 = b2;
b2 = b2->next;
}
}
部分运行结果:
完成5
遍历数组A
1
3
5
7
9
11
13
15
17
19
完成
遍历数组B
2
4
6
8
10
完成
合并完成后
17
15
13
11
9
8
7
6
5
4
3
2
1
-1163005939
-1163005939
完成
P = (LNode *)malloc(sizeof(LNode));
L = (LNode *)malloc(sizeof(LNode));
最开始这儿的地址对应的P->data和L->data是不是没有赋值,所以最开始输出的时候有两个未定义的值,你的显示函数我没看到