之所以有c单链表小案例2,是相当于c单链表小案例1来说的,在1中,我在初始化链表的时候,new一个新节点,遍历该链表,得到最后的节点,然后将新节点挂在最后的节点上,但这样存在效率问题,就是每挂一个节点,就需要遍历一次链表,由此出现了 c单链表小案例2,在这里采用的是 new出一个新的指针,通过移动指针的方式将所有节点挂载上去,
具体做法请看createLinkList这个函数中的代码
整个过程代码如下
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct MyNode{
int data;
int * pNext;
}Node,*PNode;
PNode createLinkList();
void show(PNode pNode);
void main()
{
//初始化链表
PNode phead = createLinkList();
//输出链表
show(phead);
}
//创建一个链表
PNode createLinkList(){
PNode phead;
//定义头结点
//Node Phead ;
phead = (Node * ) malloc(sizeof(Node));
if(phead == NULL){
printf("dont have enough space");
exit(0);
}
phead->pNext = NULL;
PNode pTail = phead; //初始化一个新的指针,移动这个指针将所有节点串起来。
//初始化链表个数
int number;
printf("请输入初始化链表的个数 : ");
scanf("%d",&number);
int i = 0 ;
int temp;
for(; i < number ; i++ ){
PNode newNode = (Node * ) malloc(sizeof(Node));
if(newNode == NULL){
printf("dont have enough space");
exit(0);
}
printf("请输入第%d个的值 : ",i);
scanf("%d",&temp);
newNode->data = temp;
newNode->pNext = NULL;
pTail->pNext = newNode;
pTail = newNode;
//增加到链表的末尾
}
return phead;
}
//输出链表的值
void show(PNode pNode){
printf("链表输出为 : ");
pNode = pNode->pNext;
while(pNode != NULL){
printf("%d ",pNode->data);
pNode = pNode->pNext;
}
}