c语言求解 建立链表程序。当输入0时表示链表输入结束,0不计入该链表。

建立链表程序。当输入0时表示链表输入结束,0不计入该链表。注意:只允许在/******start******/和/******end******/之间添加代码。其中:12... 建立链表程序。当输入0时表示链表输入结束,0不计入该链表。注意:只允许在/******start******/和/******end******/之间添加代码。
其中:
1 2 3 4 5 0
是键盘输入的。
#include <stdio.h>
#include <stdlib.h>

struct node
{
int data;
struct node *next;
};

struct node * create();
void output(struct node *head);

int main()
{
struct node *head;

printf("Input:\n");
head = create();
printf("Output:\n");
output(head);
return 0;
}

struct node * create()
{
/******start******/

/******end******/
}

void output(struct node *head)
{
if (head == NULL)
{
printf("No data!\n");
return ;
}
while (head != NULL)
{
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
展开
 我来答
阿尔迈凡
推荐于2018-04-12 · TA获得超过8460个赞
知道大有可为答主
回答量:5744
采纳率:14%
帮助的人:2020万
展开全部
#include <stdio.h>
#include <stdlib.h>

//链表数据结构
typedef struct _list
{
    int n;

    struct _list *next;
}LIST;

//创建一个新的节点
LIST *list_node_new(int n)
{
    LIST *node;

    node=malloc(sizeof(LIST));
    if(!node)
        return NULL;

    node->n=n;
    node->next=NULL;

    return node;
}

//创建一个新的链表
LIST *list_new(void)
{
    return list_node_new(0);
}

//向链表添加一个节点
int list_add(LIST *list,int data)
{
    LIST *node;

    //头节点
    if(list->n == 0 && list->next == NULL)
    {
        list->n=data;
        return;
    }

    while(list->next)
        list=list->next;

    node=list_node_new(data);
    if(!node)
        return -1;
    list->next=node;

    return 0;
}

//销毁链表
void list_destory(LIST *list)
{
    LIST *temp;

    while(list)
    {
        temp=list;
        list=list->next;
        free(temp);
    }
}

//遍历打印链表中的每一个节点
void list_print(LIST *list)
{
    while(list)
    {
        printf("%d\n",list->n);
        list=list->next;
    }
}

int main(int argc,char **argv)
{
    LIST *list;
    int n;

    list=list_new();

    while(1)
    {
        scanf("%d",&n);

        if(n == 0)
            break;

        list_add(list,n);
    }

    list_print(list);
    list_destory(list);

    return 0;
}
萢萢i3
2015-06-14 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.7万
采纳率:71%
帮助的人:4658万
展开全部

参考代码:

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int data;
    struct node *next;
};

struct node * create();
void output(struct node *head);

int main()
{
    struct node *head;
    printf("Input:\n");
    head = create();
    printf("Output:\n");
    output(head);
    return 0;
}

struct node * create()
{
    /******start******/
    struct node *head, *p, *q;
    int num = 0;
    head = p = q = NULL;
    scanf("%d", &num);
if (num != 0)
{
head = p = (struct node *)malloc(sizeof(struct node));
}
    while (num != 0)
    {
        p->data = num;
        scanf("%d", &num);
        if (num != 0)
        {
            q = (struct node *)malloc(sizeof(struct node));
            p->next = q;
p = q;
        }
p->next = NULL;
    }
    return head;
    /******end******/
}

void output(struct node *head)
{
    if (head == NULL)
    {
        printf("No data!\n");
        return ;
    }
    while (head != NULL)
    {
        printf("%d ", head->data);
        head = head->next;
    }
    printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
2015-06-14 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3476万
展开全部
struct node *create() {
/******start******/
struct node *head = NULL,*p,*q;
int num;
head = q = (struct node *)malloc(sizeof(struct node));
while(1) {
scanf("%d",&num);
if(num == 0) break;
if(q == head) {
q->data = num;
p = q;
q = NULL;
}
else {
p->next = (struct node *)malloc(sizeof(struct node));
p->next->data = num;
p = p->next;
}
}
p->next = NULL;
return head;
/******end******/
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式