c单链表小案例2
之所以有c單鏈表小案例2,是相當(dāng)于c單鏈表小案例1來(lái)說(shuō)的,在1中,我在初始化鏈表的時(shí)候,new一個(gè)新節(jié)點(diǎn),遍歷該鏈表,得到最后的節(jié)點(diǎn),然后將新節(jié)點(diǎn)掛在最后的節(jié)點(diǎn)上,但這樣存在效率問(wèn)題,就是每掛一個(gè)節(jié)點(diǎn),就需要遍歷一次鏈表,由此出現(xiàn)了?c單鏈表小案例2,在這里采用的是 new出一個(gè)新的指針,通過(guò)移動(dòng)指針的方式將所有節(jié)點(diǎn)掛載上去,
具體做法請(qǐng)看createLinkList這個(gè)函數(shù)中的代碼
整個(gè)過(guò)程代碼如下
#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);
}
//創(chuàng)建一個(gè)鏈表
PNode createLinkList(){
? PNode phead;
? ?//定義頭結(jié)點(diǎn)
? //Node Phead ;
? phead = (Node * ) malloc(sizeof(Node));
? if(phead == NULL){
? ? printf("dont have enough space");
? ? exit(0);
? }
?phead->pNext = NULL;
?PNode pTail = phead; //初始化一個(gè)新的指針,移動(dòng)這個(gè)指針將所有節(jié)點(diǎn)串起來(lái)。
?//初始化鏈表個(gè)數(shù)
? int number;
? printf("請(qǐng)輸入初始化鏈表的個(gè)數(shù) : ");
? 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("請(qǐng)輸入第%d個(gè)的值 : ",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;
? ? }
}
總結(jié)