xiaohuanghuang_ 2021-03-09 21:52 采纳率: 71%
浏览 49

我想写一段将链表结点元素输出的代码,但是第一个结点就输出不了,可以帮忙看看吗?

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct node{
	int data;
	struct node* next;
}node,*linklist;
void intlist(linklist l){
	l=(node*)malloc(sizeof(node));
	l->next=NULL;
}
void creatfromhead (linklist l,int n){
	int a;
	node *s;
	for (int i = 0; i <n; i++)
	{
		s=(node*)malloc(sizeof(node));
		scanf("%d",&a);
		s->data=a;
		s->next=l->next;
		l->next=s;
	}
}
void main(){
	int n,i;
	scanf("%d",&n);//n链表结点个数,默认为12,i显示第几个元素
	linklist l;
	l=(linklist)malloc(sizeof(node));
	intlist(l);
	creatfromhead(l,n);
	linklist p;
	p=l->next;
	for (i=(-1); i <n+1 ; i++)
	{
	if(i==0){
    p=NULL;
	printf("NO!");
	}
    else if(i==(-1)){
    p=l;
	printf("NO!");
	}
	else
        {
            i=i--;
            while(p!=NULL&&(i-1)!=0)
            {
                p=p->next;
                i=i--;
            }
			if (i==0)
				printf("%d",p->data);//为什么指向第一个结点输出数据就成问题了呢?
			else
				printf("NO!");
			
			
        }
	
	}

		
}
  • 写回答

1条回答 默认 最新

  • 水墨长天 2021-03-09 23:04
    关注

    看了一下代码,小伙子要加强学习啊,代码我加了些注释,有些问题还是要注意的,加油!

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    typedef struct node
    {
        int data;
        struct node *next;
    } node, *linklist;
    
    void intlist(linklist *l)
    {
        *l = (node *)malloc(sizeof(node));
        (*l)->next = NULL;
    }
    
    void creatfromhead(linklist *l, int n)
    {
        int a;
        //node *s;
    
        //首节点
        scanf("%d", &a);
        (*l)->data = a;
    
        //问题3:只有头尾两个节点,中间的丢失了
        linklist lastNode = *l;
        for (int i = 0; i < n-1; i++)
        {
            node * s = (node *)malloc(sizeof(node));
            scanf("%d", &a);
            s->data = a;
            s->next = (*l)->next;
            lastNode->next = s;
            lastNode = s;
        }
    }
    
    
    
    void main()
    {
        int n, i;
        scanf("%d", &n); //n链表结点个数,默认为12,i显示第几个元素
    
        linklist l;
        //l = (linklist)malloc(sizeof(node));//问题1:这里和intlist重复分配内存
        intlist(&l);//问题2: malloc在函数里面是临时的,需要使用二级指针或者return 指针回来
        creatfromhead(&l, n);//同2
    
        linklist p;
        //问题4:应从首节点开始
        p = l;//l->next;//指向第二个节点
        for (i = 0; i < n; i++)
        {
            //问题5:搞不太清楚是什么目的,只能重写一下
            if(p->next!=l)//看creatfromhead是循环链表,如果不是就用p->next!=NULL
            {
                printf("%d", p->data);
                p=p->next;
            }
            else
            {
                printf("NO!");
            }
    
            /*
            if (i == 0)//第二步:此时由-1到0,把P设NULL了
            {
                p = NULL;
                printf("NO!");
            }
            else if (i == (-1))//第一步:初始值就是l不是更好吗
            {
                p = l;
                printf("NO!");
            }
            else//第三步:P都NULL了,肯定异常啊
            {
                i = i--;
                while (p != NULL && (i - 1) != 0)
                {
                    p = p->next;
                    i = i--;
                }
                if (i == 0)
                    printf("%d", p->data); //为什么指向第一个结点输出数据就成问题了呢?
                else
                    printf("NO!");
            }
            */
        }
    }
    评论

报告相同问题?

悬赏问题

  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型