动态链表之头插法

动态链表之头插法
#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 insertByHead(List **l,int data)
{
List temp=(List)malloc(sizeof(List));

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

// (*l)->next = temp;
// (*l)=(*l)->next;
// (*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++)
{
insertByHead(&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(list);

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值