梦⁠回⁣从前 2021-06-25 20:10 采纳率: 25%
浏览 41

c语言链表总是输出值有错

#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
	int score;
	struct student *next;
}Linklist;

Linklist *creat(int n);
void newprintf(Linklist *head);
void Pfree(Linklist *head);
int main()
{
	int n=2;
	Linklist *head;
	head=creat(n);
	newprintf(head);
	Pfree(head);
	return 0;
}

Linklist *creat(int n)
{
	Linklist *head,*node,*end;
	head=(Linklist *)malloc(sizeof(Linklist));
	end=head;
	for(int i=0;i<n;i++)
	{
		node=(Linklist *)malloc(sizeof(Linklist));
		scanf("%d",&head->score);
		end->next=node;
		end=node;
	}
	end->next=NULL;
	return head;
}
void newprintf(Linklist *head)
{
	Linklist *p;
	p=head;
	if(p==NULL)
	{
		printf("此链表为空\n");
		return;
	}
	while(p->next!=NULL)
	{
		p=p->next;
		printf("我是%d\n",p->score);
		
	}
}
void Pfree(Linklist *head)
{
	Linklist *p;
	p=head;
	while(p!=NULL)
	{
		p=head->next;
		free(head);
		head=p;
	}
}

输出结果和理想中的不一样(那个n是长度,head是头结点)

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-06-25 20:13
    关注

    你这create明显就多创建了一个节点啊。head指向第一个节点,不是单独一个节点

    给改了一下:

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct student
    {
    	int score;
    	struct student *next;
    }Linklist;
    Linklist *creat(int n);
    void newprintf(Linklist *head);
    void Pfree(Linklist *head);
    int main()
    {
    	int n=2;
    	Linklist *head;
    	head=creat(n);
    	newprintf(head);
    	Pfree(head);
    	system("pause");
    	return 0;
    }
    Linklist *creat(int n)
    {
    	Linklist *head = NULL,*node,*p;
    	for(int i=0;i<n;i++)
    	{
    		node=(Linklist *)malloc(sizeof(Linklist));
    		scanf("%d",&node->score);
    		node->next = NULL;
    		if(head == NULL)
    		{
    			head = node;
    			head->next = NULL;
    			p = head;
    		}
    		else
    		{
    			p->next = node;
    			p = node;
    		}
    	}
    	return head;
    }
    void newprintf(Linklist *head)
    {
    	Linklist *p = head;
    	if(p==NULL)
    	{
    		printf("此链表为空\n");
    		return;
    	}
    	while(p!=NULL)
    	{
    		printf("我是%d\n",p->score);
    		p=p->next;
    	}
    }
    void Pfree(Linklist *head)
    {
    	Linklist *p = head;
    	while(p!=NULL)
    	{
    		p=head->next;
    		free(head);
    		head=p;
    	}
    }
    评论

报告相同问题?

悬赏问题

  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀
  • ¥15 C++为什么这个代码没报错运行不出来啊
  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 关于#r语言#的问题:如何将生成的四幅图排在一起,且对变量的赋值进行更改,让组合的图漂亮、美观@(相关搜索:森林图)
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请