【求助】通过数组实现链表逆向输出
Hello,各位想通过数组实现链表逆向输出,但是总出现问题,麻烦帮忙解决下:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct Lnode * next;
}Lnode;
Lnode *head; // 头结点
int array[512];
int n;
// 创建链表
Lnode* create()
{
Lnode *p;
p = (Lnode *)malloc(sizeof(Lnode));
if (p == NULL)
{
printf("err!");
}
p = head;
p->next= NULL;
return p;
}
// 输入数据做成链表
void Insert()
{
int i = 0;
Lnode *L;
L = (Lnode *)malloc(sizeof(Lnode));
if (L == NULL)
{
printf("err!");
}
while (i<n || L->data ==0)
{
printf("input num:\n");
scanf("%d ",L->data);
i++;
L->next = head->next;
head->next = L;
}
}
void change()
{
int i,j,temp;
Lnode *t;
t = (Lnode *)malloc(sizeof(Lnode));
if (t == NULL)
{
printf("err!");
}
t = head;
// 将链表中的数据输出到全局数组中
for (i=0;i<n;i++)
{
array[i] = t->data;
t = t->next;
}
// 对全局数组中进行排序
for (i=0;i<n;i++)
{
temp = array[i];
array[0] = array[n-i];
array[n-i] = temp;
}
// 将排序后的全局数组中的值输入到链表中
for (i=0;i<n;i++)
{
t->data = array[i];
t = t->next;
}
}
void main()
{
int i=0;
Lnode *s;
s = (Lnode *)malloc(sizeof(Lnode));
s = head;
scanf("%d\n",&i);
n = i;
create();
Insert();
change();
do
{
printf("%d ",s->data);
s = s->next;
}
while(s != NULL);
}