题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路:在进行两个链表合并的时候,根据题目要求合并成一个单调不减的链表,那么就是一个有序的升序链表,我们只需要定义一个空链表,把 第一个链表和第二个链表的数据进行比较,将小的数据存入空链表即可
具体实现代码:
typedef struct PNode
{
int data;
PNode * next;
};
PNode * Merge(PNode * L1,PNode * L2)
{
PNode * L = (PNode *)malloc(sizeof(struct PNode));
L->next = NULL;
PNode * p = L1->next;
PNode * q = L2->next;
PNode * r = L;
while(p && q)
{
if(p->data < q->data)
{
r->next = p;
r = p;
p = p->next;
}
else
{
r->next = q;
r = q;
q = q->next;
}
}
if(p != NULL)
{
r->next = p;
}
else
{
r->next = q;
}
L1->next = NULL;
L2->next = NULL;
return L;
}
PNode *Read()
{
PNode * L = (PNode *)malloc(sizeof(struct PNode));
L->next = NULL;
PNode * p = L;
for(int i = 0;i<5;i++)
{
PNode * s = (PNode *)malloc(sizeof(struct PNode));
s->next = NULL;
s->data = i;
p->next = s;
p = s;
}
return L;
}
void Print(PNode * L)
{
PNode * p = L->next;
while(p)
{
printf("%d\n",p->data);
p = p->next;
}
}
int main()
{
PNode * L1;
PNode *L2;
PNode *L;
L1 = Read();
L2 = Read();
L = Merge(L1, L2);
Print(L);
Print(L1);
Print(L2);
return 0;
}