合并两个非空且递增有序的单链表成一个递增有序的单链表


实现一个函数,将两个非空且递增有序的单链表合并成一个递增有序的单链表并输出。
输入样例:
3
1 3 5
4
2 4 6 8
输出样例:
1 2 3 4 5 6 8




#include <iostream>
using namespace std;
 
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100 

typedef int Status; 
typedef int ElemType; 

typedef struct LNode
{
     ElemType   data;      
     struct LNode *next;   
}LNode, *LinkList;

Status InitList(LinkList &L)
{ 
   L = new LNode;                 
   L->next = NULL;   
   return OK; 
}

void CreateList(LinkList L, int n)   
{ 
    LNode *p, *r;
    int i;   
    r = L;     
    for(i = 0; i < n; ++i)
    { 
        p = new LNode;
        cin >> p->data;            
        r->next = p;              
        r = p;      
    } 
    r->next = NULL;
}

/* 请在这里填写答案 */

void MergeList(LinkList LA, LinkList LB, LinkList &LC)
{
	LNode *pa, *pb, *pc;               //生成新结点指针pa, pb, pc                       
	pa = LA->next;                     //指针pa指向La表的首元结点 
	pb = LB->next;                     //指针pb指向Lb表的首元结点 
	LC = LA;                           //用La的头结点作为Lc的头结点 
//	Lc->next = NULL;
	pc = LC;                           //pc的初值指向Lc的头结点 
	while(pa && pb)
	{   //如果La, Lb链表均为到达表尾,依此“摘取”两表中较小的结点插入到Lc的最后 
	     if (pa->data <= pb->data)     //摘取pa所指结点 
		 {
		 	pc->next = pa;             //将pa所指结点链接到pc所指结点之后 
		 	pc = pa;                   //pc指向pa 
		 	pa = pa->next;             //pa指向下一结点 
		 }	
		 else
		 {                             //pb同理 
		 	pc->next = pb;
		 	pc = pb;
		 	pb = pb->next; 
		 }
	} 
	//将非空表剩余的元素插入到pc所指结点之后 
	//(也就是,如果pa为空,就将pb所指结点的元素插到pc结点最后,反之,把pa所指结点元素插到pc最后)
	pc->next = pa ? pa : pb;          
	
	delete LB;                        //释放Lb的头结点 
	
}

Status DispList(LinkList L)
{
    LNode *p = L->next;
    if(!p)
        return ERROR;
      while(p->next)  
      {
          cout << p->data << ' ';
          p = p->next;
    }
    cout << p->data;     
    return OK;
}

int main()
{
    LinkList La = NULL, Lb = NULL, Lc = NULL;
    int numa, numb;
    InitList(La);
    InitList(Lb);    
    cin >> numa;    
    CreateList(La, numa);
    cin >> numb;    
    CreateList(Lb, numb);
    MergeList(La, Lb, Lc);
    DispList(Lc);    
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值