请按照输入整数的顺序建立一个带表头节点的链表。已知程序的基本结构如下,请你编写 ins_list 函数。
下面是预设代码:
#include "stdio.h"
#include "stdlib.h"
struct node
{ int data;
struct node * next;
} ;
typedef struct node NODE;
typedef struct node * PNODE;
void outlist( PNODE );
void ins_list( PNODE h, int num );
int main ( )
{ int num=1;
PNODE head;
head = (PNODE)malloc( sizeof(NODE) );
head->next = NULL;
head->data = -1;
while ( num!=0 )
{ scanf("%d", &num);
if ( num!=0 )
ins_list( head, num);
}
outlist( head );
return 0;
}
void outlist( PNODE head )
{ PNODE p;
p = head->next;
while ( p != NULL )
{ printf("%d\n", p->data);
p = p->next;
}
}
发现每次传入的都是head头结点,所以为了建立正序链表,我们需要在建立代码中加入一串将指针指到链表末尾的循环语句,一开始就是在这里踩坑了……
解答
void ins_list( PNODE h, int num )
{
PNODE p;
p=(PNODE)malloc(sizeof(NODE));
while(h->next!=NULL)
{
h=h->next;
}
p -> data= num;
p -> next= NULL;
h -> next= p;
}