声明:本文参考郝斌老师的《数据结构自学视频》
今天和大家分享怎样生成一个链表。
分为以下几个步骤:
1 先生成一个头节点(头节点不存放有效数据);
2 在循环中生成首节点及其它节点。
-------------------------------------------------
typedef struct Node
{
int data;
struct Node *pNode;
}NODE, * PNODE;
首先定义了一个结构体变量。下面的函数 create_list( ) 将用来生成其它的节点。
PNODE create_list(void)
{
int len;
int i;
int val;
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if (NULL == pHead)
{
printf("分配失败,程序终止!\n");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNode = NULL;
printf("请输入您需要生成的链表的节点个数:len = ");
scanf("%d", &len);
for (i = 0; i < len; ++i)
{
printf("请输入第%d个节点的值: ", i+1);
scanf("%d", &val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("分配失败,程序终止!\n");
exit(-1);
}
pNew ->data = val;
pTail ->pNode = pNew;
pNew ->pNode = NULL;
pTail = pNew;
}
return pHead;
};
我想要明确的就是之所以我们定义了一个新的 struct Node * 类型的变量 pTail 的目的是为了能将上次循环生成的节点的地址放在 pTail 变量中,以链接下一个节点(首先为了防止上次循环产生的节点的地址丢失,其次是为了能将上次循环产生的节点地址进入下一个循环)。