湖大CG满分教程:练习八(强化)1. 合并有序链表

【问题描述】

    定义两个同种单向链表(结点中包含一个整型数和一个指向本结点类型的指针),这两个链表中数据都已按升序排序,编写函数,合并这两个链表,使合并后的链表仍然有序。

【输入形式】

    无
【输出形式】

    无
【样例输入】

    无
【样例输出】

    无
【样例说明】

    无
【评分标准】

    编写函数升序合并有序链表

#include  <iostream>
using  namespace  std;

typedef  struct  LNode*  PtrToLNode;
struct  LNode{
        int  data;
        PtrToLNode  next;
};

PtrToLNode  mergeList(PtrToLNode  head1,  PtrToLNode  head2)
{
PtrToLNode h=head1;
while(h->next)h=h->next;
h->next=head2->next;
for(PtrToLNode p=head1->next;p->next;p=p->next)
{
for(PtrToLNode q=p->next;q;q=q->next){
if(q->data<p->data)
{
int t;
t=q->data;
q->data=p->data;
p->data=t;
}
}
}
return head1;

}
void  printList(PtrToLNode  head)
{
        PtrToLNode  p  =  head->next;
        while(p!=NULL)
        {
                cout  <<  p->data  <<  "  ";
                p  =  p->next;
        }
        cout  <<  endl;
}

int  main()
{
        int  data[2][8]  =  {{-484,  0,  10,  45,  371,  425,  895,  908},{0,  3,  12,  50,  900,  999,  1024,  2048}};
        int  arrSize  =  sizeof(data[0])/sizeof(data[0][0]);
        //  将数组  data  创建带头结点的为一个单向链表  
        PtrToLNode  head1,  head2,  p,  tail;
        head1  =  tail  =  new  struct  LNode;
        for(int  i  =  0;  i  <  arrSize;i++){
                p  =  new  struct  LNode;
                p->data  =  data[0][i];
                p->next  =  NULL;
                tail->next  =  p;
                tail  =  p;
        }
        head2  =  tail  =  new  struct  LNode;
        for(int  i  =  0;  i  <  arrSize;i++){
                p  =  new  struct  LNode;
                p->data  =  data[1][i];
                p->next  =  NULL;
                tail->next  =  p;
                tail  =  p;
        }
        //  合并有序链表  
        PtrToLNode  head  =  mergeList(head1,  head2);
        //  顺序打印输出单向链表中各个节点的data数据  
        printList(head);
        //  释放链表空间  
        while(head->next!=NULL){
                p  =  head->next;
                head->next  =  p->next;
                delete  p;
        }
        delete  head;
        return  0;
}

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值