/************************************************************************/
/* huziaa@gmail.com/ */
/************************************************************************/
#include /*包含malloc( ) 的头文件*/
#include
struct node /*链表节点的结构*/
{
int num;
struct node *next;
};
struct node * creat(struct node *head);
void print(struct node * head);
int
main ()
{
struct node *head; /*定义头指针*/
head=NULL;/*建一个空表*/
head=creat(head);/*创建单链表*/
print(head);/*打印单链表*/
return 0;
}
/******************************************/
/*数函返回的是与节点相同类型的指针*/
struct node * creat(struct node *head)
{
int i=0;
struct node*p1,*p2;
p1=p2=(struct node*)malloc(sizeof(struct node));/*申请新节点*/
memset(p1, 0, sizeof(struct node));
scanf("%d",&p1->num);/*输入节点的值*/
p1->next=NULL;/*将新节点的指针置为空*/
while(p1->num>0)/*输入节点的数值大于0*/
{
if(head==NULL)
head=p1;/*空表,接入表头*/
else
p2->next=p1;/*非空表,接到表尾*/
p2=p1;
p1=(struct node*)malloc(sizeof(struct node));/*请申下一个新节点*/
memset(p1, 0, sizeof(struct node));
scanf("%d",&p1->num);/*输入节点的值*/
p1->next=NULL;
i++;
}
printf("\n total : %d\n",i);
return head;/*返回链表的头指针*/
}
/*******************************************/
/*输出以head为头的链表各节点的值*/
void print(struct node*head){
struct node *temp;
temp=head;/*取得链表的头指针*/
while(temp!=NULL) /*只要是非空表*/
{
printf("%6d\n",temp->num);/*输出链表节点的值*/
temp=temp->next;/*跟踪链表增长*/
}
}
这就是c语言单链表的创建和遍历,接着学习删除,插入.........