题目:假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
代码:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct ListNode
{
ElemType data;
ListNode *next;
} Node, *ListNode;
bool Gb_A_B(ListNode &A, ListNode &B)
{
if (A == NULL || B == NULL || A->next == NULL || B->next == NULL)
{
return false;
}
ListNode p = A->next, q = B->next;
A->next = NULL;
B->next = NULL;
while (p)
{
ListNode k = p->next;//预存下一个结点
p->next = A->next;
A->next = p;
p = k;
}
while (q)
{
ListNode k = q->next;
q->next = B->next;
B->next = q;
q = k;
}
ListNode C = (Node *)malloc(sizeof(Node));
ListNode a = A, b = B, c = C;
while (a && b)
{
if (a->next->data > b->next->data)
{
c->next = (Node *)malloc(sizeof(Node));
c->next->data = a->next->data;
a = a->next;
}
else
{
c->next = (Node *)malloc(sizeof(Node));
c->next->data = b->next->data;
b = b->next;
}
c = c->next;
}
if (a != NULL)
{
c->next = a;
}
else
{
c->next = b;
}
A->next = C->next;
B->next = C->next;
return true;
}