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é)
 
                            
                        