链表的合并c++

2022-11-18 16:24:38 浏览数 (1)

代码语言:javascript复制
#include <iostream>
#include <string>
using namespace std;

typedef struct LNode
{ 
	int date;     //节点的数据域 
	struct LNode *next;   //节点的指针域  
}LNode,*LinkList;        // LinkList 为指向结构体LNode的指针类型
 
void mergelinklist(LinkList La,LinkList Lb,LinkList &Lc) 
{
	LinkList p,q,r;
	p = La->next;  //p指向la的第一个元素 
	q = Lb->next;  //p指向Lb的第二个元素 
	Lc = La ;       //Lc指向La头结点 
	r = Lc;        //r指向Lc的尾部
	while(p&&q)
	{
		if(p->date<=q->date)
		{
			r->next = p;
			r = p;
			p = p->next;
		}
		else 
		{
			r->next = q;
			r = q;
			q = q->next;
		}
	
	} 
	if(p)  r->next = p;   //判断p是否仍然存在 
	else   r->next = q;
	delete Lb; 
}
void listprint_L(LinkList L)  //单链表的输出 
{
	LinkList p;
	p = L->next;
	while(p)
	{
	 	cout<<p->date<<"t";
	 	p = p->next;
	} 
	cout<<endl;
}
void CreateList_R(LinkList &L)   //尾插法创建单链表 (尾插法是正序建表) 
{
   	//输入n个元素,建立到头结点的单链表
   	int n ;
   	LinkList  s, r;
   	L = new LNode;
	L->next = NULL;  //先建立一个带头结点的空链表 
	r = L;           //尾指针r指向头结点  (就他自己)
    cout<<"请输入元素个数 n: "<<endl;
	cin>>n;
	cout<<"请依次输入n个元素:"<<endl;
	cout<<"前插法创建单链表..."<<endl;
	while(n--)
	{ 
	 	s = new LNode ;       //生成新结点s
		cin>>s->date;          //输入元素赋值给新结点的数据域
	    s->next = NULL;
	    r->next = s;           //将新结点插s插入尾结点*r之后
		r = s;                 //r指向新的尾结点s 
    }
}
int main()
{
	LinkList La,Lb,Lc;
	CreateList_R(La);
	CreateList_R(Lb);
	mergelinklist(La,Lb,Lc);
	listprint_L(Lc);
	 
}

0 人点赞