#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!");
}
}
}
看了一下代码,小伙子要加强学习啊,代码我加了些注释,有些问题还是要注意的,加油!
#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!");
}
*/
}
}