创建单链表有多种方式,我这里介绍从尾部添加新节点的创建方式。
创建的过程:
1.定义节点的数据结构
c语言中链表节点是用结构体来实现,创建之前要明白数据域需要什么类型的数据。例如:
//定义链表中的节点
typedef struct node{
int data; //链表中的数据
struct node * p_next;//指向下一节点的指针
}Node,*pNode;
2.动态创建节点
创建节点的过程中要用到三个指针:
p_head:指向头节点的指针
p_tail:指向当前尾节点的指针
pNew:指向新增节点的指针
就像数组一样,我们能通过数组名或数组的第一个元素的地址来找到该数组,链表是通过头指针来找到的,所以创建的第一步要
定义一个头指针,接着我们要让p_tail指针指向头结点(一开始头节点就是尾节点),动态创建一个节点,并用pNew指针来指向,同时把新节点加到链表末尾(即p_tail的指向的下一节点为pNew指向的节点),把新节点指向的节点赋为空(此时新节点加上后就变为最后一个节点了,所以它指向的下一节点为空),设置尾节点为新节点(即p_tail=pNew),再添加新节点是,重复上一步骤。
创建的代码实现如下:
pNode CreateList(){
int i, len;
//开辟头结点
pNode p_head = (pNode) malloc(sizeof(Node));
pNode p_tail = p_head;
p_tail->p_next = NULL;
printf("请输入节点的个数:");
scanf("%d",&len);
for(i = 0;i < len; i++){
pNode pNew = (pNode) malloc(sizeof(Node));//开辟新节点
scanf("%d", &pNew->data);
p_tail->p_next = pNew;//将尾节点指向新节点
pNew->p_next = NULL;//新节点应该指向NULL
p_tail = pNew;//当前尾节点为新节点
}
return p_head;
}
顺序遍历链表:
void TraverseList(pNode h){
pNode p = h->p_next;
while(p != NULL){
printf("%d\n",p->data);
p = p->p_next;
}
}
测试代码:
int main()
{
pNode test = CreateList();
TraverseList(test);
return 0;
}
//输入1 2 3
//输出1 2 3