#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!");
}
}
}
我想写一段将链表结点元素输出的代码,但是第一个结点就输出不了,可以帮忙看看吗?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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!"); } */ } }
解决 2无用
悬赏问题
- ¥100 有偿寻云闪付SDK转URL技术
- ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
- ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
- ¥15 远程安装一下vasp
- ¥15 自己做的代码上传图片时,报错
- ¥15 Lingo线性规划模型怎么搭建
- ¥15 关于#python#的问题,请各位专家解答!区间型正向化
- ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
- ¥50 comsol温度场仿真无法模拟微米级激光光斑
- ¥15 上传图片时提交的存储类型