注明:修改程序正确 追加10分;若写出教好的程序并通过编译追加50分
输入一系列整数,以0作为结束标志,建立一个单链表。
[解析] 方法1 单链表分配给每个结点的存储空间可分为两部分,一部分存放输入的整数,称为data域,另一部分存放指向结点后继的指针,称为next域,最后一个结点没有后继。其next域为NULL。单链表的头指针为head,head指向头结点。当链表建成后,撤消头结点。该方法每次将新结点插在单链表的表尾,设流动指针P,P总是指着单链表最后插入的那个结点。
#include”stdlib.h”
main(){
typedef struct linknode //单链表的结点类型
{ int data;
struct linknode *next;
} node;
node * head,*p,*s;
int x, flag=1; //flag为循环控制标志,其值等于1继续循环,等于0结束循环
head=(node*)malloc(sizeof(node)); 建立单链表的头结点,head指向头结点
p=head;
while (flag)
{ scanf(“%d”,&x);
if (x!=0)
{
s=(node*)malloc(sizeof(node));//建立下一个结点,指针s 存放该结点的首地址
s->data=x; //将整数x存入该结点
p->next=s;//把s结点连接到单链表最后一个结点的后面
p=s;
}
else flag=0;
}
head=head->next;//删除头结点
p->next=NULL;
p=head;//从第一个结点开始
while (p) //输出单链表中的所有结点
{ printf(“\n%4d”,p->data);
p=p->next;
}
}