单链表的创建、删除与打印

 单链表的创建包括两种方法,头插法和尾插法。其中头插法是将每个新添加的结点作为第一个结点,紧紧跟在头结点后面。尾插法是将每个新的结点作为最后一个结点,要注意最后声明最后一个结点的指针为NULL。

#include "iostream"
#include "ctime" //产生随机数
#include "cstdlib"

using namespace std;

#define N 7

//定义单链表结点
typedef struct node
{
	int data;
	struct node *next;  //因为结构体类型node1这里还没有定义
}linknode;

typedef struct node *linklist; 

/*创建n长度的随机链表,采用头插法*/
linklist CreateLinklist1(int n)
{
	srand(time(0));
	linklist linkhead = new linknode;//创建头结点
	linkhead->next=NULL;

	for(int i=0;i<n;i++)
	{
		linklist p=new linknode;//产生一个新的结点
		p->data=rand()%10+1;//随机产生一个1-10的数
		p->next=linkhead->next;//将产生的结点加入到头结点后边
		linkhead->next=p;
	}
	return linkhead;
}

/*产生随机数创建链表,采用尾插法*/
linklist CreateLinklist2(int n)
{
	srand(time(0));
	linklist linkhead=new linknode;
	linkhead->next=NULL;
	linklist linktail=linkhead;
	for(int i=0;i<n;i++)
	{
		linklist p=new linknode;
		p->data=rand()%10+1;
		linktail->next=p;
		linktail=p;
	}
	linktail->next=NULL;
	return linkhead;
}

void PrintLinklist(linklist linkhead)
{
	if (linkhead->next==NULL)
		cout<<"空链表"<<endl;
	linklist p = linkhead->next;
	while(p!=NULL)
	{
		cout<<p->data<<" ";
		p=p->next;
	}
	cout<<endl;
}

/*单链表的删除*/
void ClearLinklist( linklist linkhead )
{
	linklist p=linkhead->next;
	linklist r;

	while(p!=NULL)
	{
		r=p->next;
		free(p);
		p=r;
	}
	linkhead->next=NULL;
}

int main ()
{
	linklist linkhead1=CreateLinklist1(5);
	PrintLinklist(linkhead1);

	linklist linkhead2=CreateLinklist2(5);
	PrintLinklist(linkhead2);

	ClearLinklist( linkhead1 );
	PrintLinklist(linkhead1);

	ClearLinklist( linkhead2 );
	PrintLinklist(linkhead2);
	return 0;
}

运行结果:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值