C/C++链表合并,头部插入

数据结构单链表合并头部插入

数据结构链表合并c++代码

直接上代码应该简单明了

#include<iostream>
using namespace std;
struct Node{
	int data;//数据域 
	struct Node* next;//next指针域 
};

struct Node* creatList()//创建链表 
{
	struct Node* headNode = new Node;//申请内存空间 
	headNode->next = NULL;//头指针为空 
	return headNode;//返回头指针 
}
struct Node* creatNode(int data)//创建节点 
{
	struct Node* newNode = new Node;//申请内存空间 
	newNode->next = NULL;//新节点下一个节点为空 
	newNode->data = data;//数据指针指向data参数的数据 
	return newNode; //返回新节点 
}
int insertNode(struct Node* headNode,int data)//插入节点 
{
	
	struct Node* newNode = creatNode(data);//创建新节点 使用data参数 
	newNode->next = headNode->next;// 头新节点的下一个地址是原先头节点(地址),就是那个NULL 
	headNode->next= newNode;//头结点的下一个节点指向新节点 
	return 0;
	
}

int printList(struct Node* headNode)//打印链表数据函数
{
	
	struct Node *p = headNode->next;//定义几个工具节点,目前指向头节点的下一个节点,当然也可以指向头节点,为了说明头节点data为空 
	while(p != NULL)//如果工具节点的下一个节点为NULL就说明走到头了,可以使用for循环 
	{
		
		cout<<p->data<<" ";//输出该节点的数据 
		p = p->next;//工具节点继续往后移动 
	}
	cout<<endl;//打印完一个链表数据回车 
	return 0;
}
int mergeList(struct Node*List1,struct Node* List2)//链表合并 
{
	
	struct Node *pt;//工具节点pt 
	pt = List1;//pt指向传递参数List1(首地址,指针特性) 
	while(pt->next != NULL) 
	{
		pt = pt->next;
	}//将工具节点移动到最后一个节点 
	//for (struct Node *p = List1;p->next != NULL;p = p->next);
	pt->next = List2->next; //参数List2链表的头一个链表的下一个地址是List1的下一个地址,将两个链表头尾相连 
	//delete(List2);//释放空间 
}
int insert(struct Node *headNode,int n)//输入插入数据参数为 头指针  插入数据数量 
{
	int temp,a[n];//临时整形数据temp(用与数组数据前后颠倒) 
	for (int i = 0;i < n;i++)
	{
		
		cin>>a[i];
	}//将数据输入到a数组 
	for (int i = 0,j = n -1;i < j;i++,j--)
	{
		temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}//数组数据前后颠倒,因为方法是从头部插入数据,数据方向是相反的 
	for (int i = 0;i < n;i++)
	{
		
		insertNode(headNode,a[i]);//参数 headnode 还有int型的data就是数组内的元素 
	}
	return 0;
}
int main()
{
	struct Node* list1 = creatList();//直接创建list1链表 
	/*int a[4] = {1,2,3,4};
	insertNode(list1,a[3]);
	insertNode(list1,a[2]);
	insertNode(list1,a[1]);
	insertNode(list1,a[0]);*///静态输入list1 
	//printf("输出第一个链表的数据:");//如果不输出说明printList函数有错误 
	int n1;
	cout<<"请输入第一个链表数据的个数:" ;
	cin>>n1;
	cout<<"请输入第一个链表的数据(用空格隔开):";
	insert(list1,n1);
	printList(list1);
	struct Node* list2 = creatList();
	/*insertNode(list2,8);
	insertNode(list2,7);
	insertNode(list2,6);
	insertNode(list2,5);*/
	//printf("输出第二个链表的数据:");
	int n2;
	cout<<"请输入第二个链表的数据个数:" ;
	cin>>n2;
	cout<<"请输入第二个链表的数据(用空格隔开):";
	insert(list2,n2); 
	printList(list2); 
	mergeList(list1,list2);//合并 
	//printf("输出合并链表后的数据:");//如果不输出说明mergeList函数有错误
	printList(list1);
	cout<<"hehe"<<endl;
	return 0;//结束 
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值