#include <stdio.h>
#include <stdlib.h>
struct Node*creatlist(void);
void showlist(struct Node*pHead);
typedef struct Node
{ int data;
struct Node*pNext;
}Node;
int main()
{ Node*pHead;
pHead=creatlist();
showlist(pHead);
return 0;
}
//制作链表,并实现数据的输入。
struct Node*creatlist(void)
{ int i,val,len;
struct Node*pHead;
pHead=(struct Node*)malloc(sizeof(struct Node));
if(pHead==NULL)
{
printf("内存分配失败");
exit(1);
}
struct Node*pTail;
pTail=pHead;//这一步并不是多此一举,为什么了因为你这是一个又返回值的函数,你返回的就是这个头结点的首地址,所以你必须在这里记录。
printf("请输入你所需要的链表的长度len\n");
scanf("%d",&len);
for(i=0;i<len;i++)//这个循环很重要,前面实现了头文件的设立,这里需要实现链表的连接。
{ printf("请输入data所存储的数据%d\n",i+1);
scanf("%d",&val);
struct Node*pNew=(struct Node*)malloc(sizeof(struct Node));
if(pNew==NULL)
{
printf("内存分配失败");
exit(1);
}
pNew->data=val;
pTail->pNext=pNew;
pNew->pNext=NULL;//这步的初始化很重要的,也就是这一步实现了最后一个的null化,不让这个链表可是会乱指的。
pTail=pNew;
}
return pHead;
}
void showlist(struct Node*pHead)
{
Node*p=pHead;
while(p->pNext!=NULL)
{
p=p->pNext;
printf("%d\t",p->data);
}
return;
}
//第一份链表,你可以与数组类比,其中的指针区使得链表一个个连在了一起,但是如何使用这些链表,就需要一个指针来实现。
//就如同数组一个个连在一起,但是你要如何使用,还是要使用指针,从而实现数组的表示。