动态链表的实现
动态链表尾插法
#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;
}