写链表逆置时遇到的奇怪的问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 11:48:46
代码一
#include "Stdio.h"
#include "Conio.h"
typedef struct node{
int data;
struct node *next;
}link;
creat(int n,link *p){
link *q;
int i;
p=(link *)malloc(sizeof(link));
p->next=NULL;
p->data=n;
for(i=0;i<n;i++) {
q=(link *)malloc(sizeof(link));
scanf("%d",&q->data);
//printf("%d\n",q->data);
q->next=p->next;
p->next=q;
}
return p;
}
ni(link *p){
link *l,*q;
q=p->next;
while(l!=NULL){
l=q->next;
q->next=l->next;
l->next=p->next;
p->next=l;
}
return p;
}
main()
{
link *p;
p=creat(4,p);
ni(p);
p=p->next;
while(p->next!=NULL){
printf("%d",p->data);
p=p->next;
}

做逆置的时候指针l没有赋值就直接当作while的条件了

就是建链表的时候,那个p 和q的关系没处理好,看你写得乱七八糟的,那个P是链表头怎么还能在里边做中间变量呢?你是用WINTC编译的吧,也就这个垃圾编译器才能出结果,别的编译器直接就把调试器弄出来了,好好看书吧