1 //code by zzlpp && code for link_list training 2 typedef struct Node 3 { 4 int value; 5 struct Node *link; 6 }Node; 7 8 //頭文件只包含節點的聲明 文
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <malloc.h> 4 #include "node.h" 5 6 Node*creatnode(int value); 7 void insertnode( Node **pointer,int value ); 8 9 void main() 10 { 11 Node *p=creatnode(5); 12 Node **pointer=&p; 13 insertnode(pointer,3); 14 do 15 { 16 printf("%d\t",p->value); 17 p=p->link; 18 }while( p!=NULL ); 19 printf("\n"); 20 system("pause"); 21 } 22 Node *creatnode(int value) 23 { 24 Node *root; 25 root=( Node *)malloc( sizeof(Node) ); 26 if (root==NULL) 27 { 28 free( root ); 29 printf("error\n"); 30 exit(EXIT_FAILURE); 31 } 32 root->value=value; 33 root->link=NULL; 34 return root; 35 } 36 void insertnode( Node **pointer,int value ) 37 { 38 Node *current; 39 Node *previous; 40 41 previous=NULL; 42 current=*pointer; 43 44 Node *newnode=( Node* )malloc( sizeof(Node) ); 45 if ( newnode==NULL ) 46 { 47 free( newnode ); 48 printf("error\n"); 49 exit(EXIT_FAILURE); 50 } 51 newnode->value=value; 52 while ( current->value<value && current->link!=NULL ) 53 { 54 previous=current; 55 current=current->link; 56 } 57 if ( current->link==NULL ) 58 { 59 if ( current->value<value ) 60 { 61 current->link=newnode; 62 newnode->link=NULL; 63 } 64 else 65 { 66 newnode->link=current; 67 *pointer=newnode; 68 } 69 } 70 else 71 { 72 newnode->link=current; 73 previous->link=newnode; 74 } 75 }
和原書上寫的有些出入,總的來講就是要考慮到3種狀況,第一種是要考慮插在鏈表的中間,第二種是要考慮到查到結尾,最後是要你考慮到查到開頭,這三種狀況缺一不可,我的以爲如此處理更爲清晰一些。node
件名 「node.h」