void insert(NODE **phead ,int data)
{
NODE *p1=*phead,*p2=NULL,*p;
while(p1 !=NULL)
if(datax)
p=(NODE *)malloc(sizeof(struct node));
p->x=data;
p->next=p1;
if( 1 p2==NULL ) /*若插入的節點將成為頭節點*/
( 2 *phead )=p;//將頭節點指標指向當前節點
else // 如果不是頭節點,直接將p1前的一個節點也就是p2所在的節點和當前插入節點連線
p2->next=p;
break; // 跳出迴圈,插入已經完成,函式會馬上返回。
}
// 可能要新增以下兩行程式碼才會工作正常
p2 = p1;
p1 = p2->next;
if(p1==NULL) // 如果沒有頭節點直接新增
p=(NODE*),alloc(sizeof(struct node));
p->next=( 3 NUll ); // 設定頭節點的後向指標
if( 4 p2==NUll )/* 若插入的節點將成為頭節點*/
( 5 *phead )=p;
else // 以下程式碼根本就是多餘的
void insert(NODE **phead ,int data)
{
NODE *p1=*phead,*p2=NULL,*p;
while(p1 !=NULL)
{
if(datax)
{
p=(NODE *)malloc(sizeof(struct node));
p->x=data;
p->next=p1;
if( 1 p2==NULL ) /*若插入的節點將成為頭節點*/
( 2 *phead )=p;//將頭節點指標指向當前節點
else // 如果不是頭節點,直接將p1前的一個節點也就是p2所在的節點和當前插入節點連線
p2->next=p;
break; // 跳出迴圈,插入已經完成,函式會馬上返回。
}
// 可能要新增以下兩行程式碼才會工作正常
p2 = p1;
p1 = p2->next;
}
if(p1==NULL) // 如果沒有頭節點直接新增
{
p=(NODE*),alloc(sizeof(struct node));
p->x=data;
p->next=( 3 NUll ); // 設定頭節點的後向指標
if( 4 p2==NUll )/* 若插入的節點將成為頭節點*/
( 5 *phead )=p;
else // 以下程式碼根本就是多餘的
p2->next=p;
}
}