动态链表之尾插法

动态链表的实现

动态链表尾插法
#include
#include<malloc.h>
#include<time.h>
using namespace std;

static int length=0;
typedef struct List{
int data;
List* next;
}List;

void listInit(List *l)
{
l->data=0;
l->next=NULL;
}

void insertByTail(List **l,int data)
{
List temp=(List)malloc(sizeof(List));

temp->data = data;
temp->next=NULL;


(*l)->next = temp;	
(*l)=(*l)->next;

}

void printList(List *l)
{

while(l)
{
	cout<<l->data<<endl;
	l=l->next;
}
//不能直接用l来进行遍历,否则会在l=l->next这个地方每一次产生一个尾部根本不存在的指向,导致程序崩溃
/*for(int i=0;i<len;i++)
{
	cout<<l->data<<endl;
	l=l->next;
}*/

}

int main(int argc , char* argv[])
{
//对于要操作的链表,要首先通过申请开辟堆空间来获得链表的首地址
//刚开始我把List list=(List)malloc(sizeof(List));这一句放到void listInit(List *l)中,企图通过初始化函数来开辟,结果会运行时报错
//那是因为,我在初始化函数中没有返回初始化后链表的地址,导致,再回到主函数时,初始化函数释放内存空间,连着开辟的链表地址也被释放了,而主函数中的链表还没得到地址数据
List list=(List)malloc(sizeof(List));
listInit(list);
List *p=NULL;

// insertByHead(&list,5);
// cout<data<<endl;
// cout<next->data<<endl;
p=list;
// p=list->next;
for(int i=0;i<5;i++)
{
insertByTail(&list,i);

//	List *tmp=(List*)malloc(sizeof(List));
//	tmp->data=i;
//	list->next = tmp;
/*	list->data = i;
	list->next=(List*)malloc(sizeof(List));
	list=list->next;*/
	length++;
//	list=list->next;
}
//list=p;
printList(p);

cout<<"hello world"<<endl;
return 0;

}