这个问题是今天刷实习面经的时候看到的,就想自己写写。
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define FALSE 0
#define TRUE 1
typedef int ElemType;
typedef int Status;
typedef struct ListNode
{
ElemType data;
struct ListNode * next;
}ListNode, * LinkList;
Status InitList(LinkList * L)
{
*L = (LinkList) malloc(sizeof(ListNode));
if(!(*L))
exit(0);
(*L)->next = NULL;
return OK;
}
Status Insert(LinkList * L, int i, ElemType e)
{
int j = 1;
ListNode *p, *q;
p = *L;
while(p && j < i)
{
j++;
p = p->next;
}
q = (LinkList)malloc(sizeof(ListNode));
if(!q)
exit(0);
q->data = e;
q->next = p->next;
p->next = q->next;
return OK;
}
void CreateList_tail(LinkList * L)
{
ElemType n;
ListNode *p, *q;
p = *L;
while(scanf("%d", &n) && n != 0)
{
q = (ListNode *)malloc(sizeof(ListNode));
if(!q)
exit(0);
q->data = n;
q->next = NULL;
p->next = q;
p = q;
}
}
Status sort_merge(LinkList *L1 , LinkList L2)
{
ListNode *p, *q, *temp, *pre;
p = (*L1)->next;
q = L2->next;
while(p && q)
{
if(q->data >= p->data)
{
pre = p;
p = p->next;
}
else
{
temp = (LinkList)malloc(sizeof(ListNode));
if(!temp)
exit(0);
temp->data = q->data;
p = pre;
temp->next = p->next;
p->next = temp;
q = q->next;
}
}
if(q != NULL)
{
p = pre;
p->next = q;
}
return OK;
}
Status Traverse(LinkList L)
{
ListNode *p;
p = L->next;
while(p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return OK;
}
int main()
{
LinkList L1, L2;
InitList(&L1);
InitList(&L2);
CreateList_tail(&L1);
CreateList_tail(&L2);
Traverse(L1);
Traverse(L2);
sort_merge(&L1,L2);
Traverse(L1);
return 0;
}