基本思路:非递归合并过程中直接将原链表的节点从原链表中取出链入合并链表中。递归合并中将链入节点后剩余的链表作为新的链表再递归合并。
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//合并两个有序链表
LinkList mergeList(LNode *head1,LNode *head2){
LinkList pa = head1,pb = head2,pc = NULL,head = NULL;
if(pa==NULL)
return pb;
if(pb==NULL)
return pa;
//确定合并后链表头结点指针head,pc指向合并过程中合并链表获得的最新节点
if(pa->data <= pb->data)
{
head = pa;
pa = pa->next;
pc = head;
}
else
{
head = pb;
pb = pb->next;
pc = head;
}
//合并链表
while(pa!=NULL && pb!=NULL)
{
if(pa->data <= pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa !=NULL ? pa : pb;
return head;
}
//递归合并两个单链表
LinkList mergeTwoList(LinkList head1,LinkList head2)
{
if(head1==NULL)
return head2;
if(head2==NULL)
return head1;
LinkList head = NULL;
if(head1->data<=head2->data)
{
head = head1;
head->next = (head1->next,head2);
}
else
{
head = head2;
head->next = (head1,head2->next);
}
return head;
}