#include <stdio.h>
#include <stdarg.h>
#include <malloc/malloc.h>
typedef struct node
{
int data;
structnode *next;
}ListNode;
//递归算法参考剑指offer(纪念版) p116
ListNode *merge(ListNode *head1,ListNode *head2)
{
ListNode *mergeHead =NULL;
if (head1 == NULL) {
return head2;
} else if (head2 == NULL) {
return head1;
}
if (head1 -> data < head2 ->data) {
mergeHead = head1;
mergeHead -> next =merge(head1 ->next, head2);
} else {
mergeHead = head2;
mergeHead -> next =merge(head1, head2 ->next);
}
return mergeHead;
}
//参考 C Primer Plus (第五版) p480
ListNode *new(int lim,...)//参数个数指定为lim个
{
va_list ap;
ListNode *head =NULL;
ListNode *p =NULL;
int i;
va_start(ap, lim);
for (i = 0; i < lim; i++) {
ListNode *new ;
new = (ListNode *)malloc(sizeof(ListNode));
if (new != NULL) {
if (head == NULL) {
head = new;
} else {
p -> next = new;
}
new -> data =va_arg(ap,int);
p = new;
}
}
va_end(ap);
return head;
}
int main(int argc,constchar * argv[]) {
//创建两个有序链表
ListNode *n1 =new(7,1,3,5,7,9,11,13);
ListNode *n2 =new(7,2,4,6,8,10,12,14);
//合并成一个有序链表
ListNode *mer =merge(n1, n2);
//输出合并之后的链表中的元素
while (mer != NULL) {
printf("%d ",mer ->data);
mer = mer ->next;
}
return 0;
}