C和指針筆記——鏈表的研究和改善

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」                   
相關文章
相關標籤/搜索