软件编程
位置:首页>> 软件编程>> C语言>> C++实现接两个链表实例代码

C++实现接两个链表实例代码

作者:lqh  发布时间:2023-05-04 01:27:02 

标签:C++,链表

 C++实现接两个链表实例代码

有以ha为头结点的链表,元素个数为m;以hb为头结点的链表,元素个数为n。现在需要你把这两个链表连接起来,并使时间复杂度最小,请分析并实现。

思路:

很简单的链表操作的题目,逆序头部插入,并将长度较长的一方接到较短的后面,时间复杂度为O(min(m,n)),注意free使用的地点!。

实例代码:


#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
typedef int ElemType;

typedef struct Node
{
 ElemType data;
 struct Node *next;
}Lnode,*LinkList;

//打印  
void print(LinkList &head)
{
 LinkList plist=head->next;
 while(plist!=NULL)
 {
   cout<<plist->data<<" ";
   plist=plist->next;
 }
 cout<<endl;
}

//逆序输入链表  
void CreateList(LinkList &L,int m)
{
 LinkList p;
 L=(LinkList)malloc(sizeof(Node));
 L->next=NULL;
 cout<<"逆序输入元素,空格分隔:"<<endl;
 for(int i=m;i>0;--i)
 {
   p=(LinkList)malloc(sizeof(Node));
   cin>>p->data;
   p->next=L->next;
   L->next=p;
 }
 print(L);
}

//连接链表  
void Combine(LinkList &ha,int m,LinkList &hb,int n,LinkList &hc)
{
 LinkList selectMin;
 hc=(LinkList)malloc(sizeof(Node));
 int flag=0;
 if(m>n)
 {
   selectMin=hb;
   flag=1; //ha在后面  
 }
 else
 selectMin=ha;

while(selectMin->next!=NULL)
 selectMin=selectMin->next;

if(flag)
 {
   selectMin->next=ha->next;
   hc=hb;
   free(ha);//notice
 }
 else
 {
   selectMin->next=hb->next;
   hc=ha;
   free(hb);
 }
 cout<<"合并后的链表为:"<<endl;
 print(hc);  
}

void Destory(LinkList &hc) //仅释放hc即可  
{
 LinkList temp;
 while(hc!=NULL)
 {
   temp=hc;
   hc=hc->next;
   free(temp);
 }
}
int main()
{
 int m,n;
 cout<<"请输入以ha为head节点链表的元素个数:"<<endl;
 cin>>m;
 LinkList ha,hb,hc;
 CreateList(ha,m);
 cout<<"请输入以hb为head节点链表的元素个数:"<<endl;
 cin>>n;
 CreateList(hb,n);
 Combine(ha,m,hb,n,hc);

Destory(hc);
 return 0;  
}

C++实现接两个链表实例代码

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:http://blog.csdn.net/nk_test/article/details/51056798

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com