单链表的创建包括两种方法,头插法和尾插法。其中头插法是将每个新添加的结点作为第一个结点,紧紧跟在头结点后面。尾插法是将每个新的结点作为最后一个结点,要注意最后声明最后一个结点的指针为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;
}
运行结果: