输入一系列整数,以0作为结束标志,建立一个单链表。要求C语言求解!

注明:修改程序正确 追加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;
}
}

第1个回答  推荐于2016-10-06
#include <stdlib.h>

typedef struct linknode /* 单链表的结点类型 */
{
int data;
struct linknode *next;
} node;

main()
{
node *head=NULL,*p,*s;
int x, flag=1; /* flag为循环控制标志,其值等于1继续循环,等于0结束循环 */

while (flag)
{
scanf("%d",&x);
if (x!=0)
{
s=(node*)malloc(sizeof(node));/* 建立下一个结点,指针s 存放该结点的首地址 */

if(s==NULL)
{
printf("不能分配内存\n");
while (head)
{
p=head;
head = head->next;
free(p); /*释放内存*/
}
return 0;
}

s->data = x; /* 将整数x存入该结点 */
s->next = NULL;

if (head == NULL) /*创建头指针*/
{
head = s;
p = head;
}
else
{
p->next=s;/* 把s结点连接到单链表最后一个结点的后面 */
p=s;
}
}
else flag=0;
}

p=head;/* 从第一个结点开始 */
while (head) /* 输出单链表中的所有结点 */
{
p=head;
printf("\n%4d",head->data);
head = head->next;
free(p); /*释放内存*/

}

return 0;
}本回答被提问者采纳