链表转置后没有打印结果,while函数里也没有一个打印结果,为什么没进循环呢?求改错。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct student
{
int data;
struct student *next;
}a;
struct student *p,*q,*head,*t,*l,*m;
int main()
{
int i,n,c=0;
printf("请输入n:\n");
scanf("%d",&n);
l=head=q=&a;
printf("\n");
q->next=NULL;
printf("正项链表:\n");
printf("请输入%d个同学的成绩:\n",n);
for(i=0;i<n;i++)
{
p = (struct student*)malloc(sizeof(struct student));
c++;
if(c==1) head=l=p;
scanf("%d",&p->data);
if(p->data == -1)
{
printf("输入结束\n");
p -> next = NULL;
break;
}
q->next = p;
q = q->next;
}
p->next=NULL;
printf("\n");
printf("打印数据:\n");
for(i=0;head!=NULL;i++)
{
printf("%d\n", head->data);
head = head->next;
}
printf("转置为逆向链表为:\n");
t= l->next;
m->next =NULL;
while(l!=NULL)
{
l->next= m->next;
m->next = l;
l = t;
t = t->next;
printf("%d\n",l->data);
}
for(i=0;i<n;i++)
{
printf("%d\n",m->data);
m=m->next;
}
return 0;
}
你稍微画一下链表,你就晓得问题出在那了。
供参考:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
struct student{
int data;
struct student* next;
}a;
struct student* p, * q, * head, * t, * l, * m;
int main()
{
int i, n, c = 0;
printf("请输入n:\n");
scanf("%d", &n);
l = head = q = &a;
printf("\n");
q->next = NULL;
printf("正项链表:\n");
printf("请输入%d个同学的成绩:\n", n);
for (i = 0; i < n; i++)
{
p = (struct student*)malloc(sizeof(struct student));
p->next = NULL;
scanf("%d", &p->data);
if (p->data == -1)
{
free(p); //修改
printf("输入结束\n");
break;
}
c++; //修改
if (c == 1)
head = l = p;
else //修改
q->next = p;
q = p; //q = q->next;
}
//p->next = NULL;
printf("\n");
printf("打印数据:\n");
for (i = 0; head != NULL; i++)
{
printf("%d\n", head->data);
head = head->next;
}
printf("转置为逆向链表为:\n");
t = l->next;
l->next = NULL; //m->next = NULL;
while (t != NULL) //(l != NULL)
{
m = t;
t = t->next; //m->next;
m->next = l;
l = m;
//t = t->next;
//printf("%d\n", l->data);
}
for (i = 0; i < n; i++)
{
printf("%d\n", m->data);
m = m->next;
}
return 0;
}
设置断点,一步一步跟,看每一步都符合你的预期吗,从哪一步开始就已经不对了?
学编程先学调试,不能总靠猜
简单程序还可以靠把代码都看懂了用大脑模拟,等你写了10000行代码还这么玩不得累死