不开辟新空间,两个有序单链表合并为一个有序单链表


/*链表*/
#include <stdlib.h>

typedef struct node
{
    int data;
    struct node *next;
}*Listlink;

/*后插法创建单链表*/
void hou_create(Listlink *head,int n)
{
    int i;
    Listlink p,q;
    *head=(Listlink )malloc(sizeof(struct node));
    (*head)->next=NULL;/*建立头结点*/
    q=*head;
    for(i=0;i<n;i++)
    {
       p=(Listlink)malloc(sizeof(struct node));
       scanf("%d",&(p->data));

       p->next=q->next;
       q->next=p;
       q=p;
    }

}

/*将两个递增单链表合并为一个递增的单链表*/
void merge(Listlink la,Listlink lb,Listlink *lc)

{
    Listlink pa,pb,pc;
    *lc=la;                        /*合并后的链表头结点使用a链表的*/

    pa=la->next;
    pb=lb->next;
    pc=*lc;

    while(pa!=NULL&&pb!=NULL)
    {
       if(pa->data<pb->data)
       {
          pc->next=pa;
          pa=pa->next;
          pc=pc->next;
       }
       else
       {
          pc->next=pb;
          pb=pb->next;
          pc=pc->next;
       }
    }
    if(pa!=NULL)pc->next=pa;
    else         pc->next=pb;
}

void print_list(Listlink head)
{
     Listlink p;
     p=head->next;
     while(p!=NULL)
     {
       printf(" %d",p->data);
       p=p->next;
     }
}

main()

{

   Listlink la,lb,lc;

   puts("houcha:");
   hou_create(&lb,10);
   puts("houcha:");
   hou_create(&la,10);

   merge(la,lb,&lc);
   print_list(lc);
   getch();


}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值