问题遇到的现象和发生背景
题目:判断链表是否为非递增有序,是删除同值多余元素并就地逆置,否则输出相应信息
问题:链表每次初始化结束,就退出了,不能运行if的内容
用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
typedef struct Link{
int elem;
struct Link* next;
}link;
link* initLink(){
link* p=(link*)malloc(sizeof (link));//创建头节点
link* temp=p;//声明一个指针指向头节点
//生成链表
char s=' ';
int b;
while(s!='\n'){
link* a=(link*)malloc(sizeof(link));
scanf("%d",&b);
a->elem=b;
a->next=NULL;
temp->next=a;
temp=temp->next;
scanf("%c",&s);
}
return p;
}
void display(link* p){
link* temp=p;//将temp指针指向头指针
//只要temp指针指向的节点的next不是NULL,就执行输出语句。
while(temp->next){
temp=temp->next;
printf("%d",temp->elem);
}
printf("\n");
}
//判断链表是否非递增有序
int panduan(link* p){
link* temp=p;//将temp指针指向头指针
//只要temp指针指向的节点的next不是NULL,就执行输出语句。
while(temp->next){
temp=temp->next;
if(temp->elem<temp->next->elem){
printf("该链表不是非递增有序的!");
return 0;
}
}
return 1;
}
//删除多余值
link * shanchuduoyu(link* p){
link* temp=p;//将temp指针指向头指针
while(temp->next){
temp=temp->next;
if(temp->elem==temp->next->elem){
link* del=temp->next;//单独设置一个指针指向被删除节点,以防丢失
temp->next=temp->next->next;//删除
free(del);//手动释放,防止内存泄漏
}
}
return p;
}
//就地逆置链表
link* ReverseList(link* p){
if(p==NULL||p->next==NULL){
return p;
}
link *pRev=NULL;
link *pCur=p;
link* q=p->next;
while(pCur!=NULL){
link *pTemp=pCur;
pCur=pCur->next;
pTemp->next=pRev;
pRev=pTemp;
}
p->next=pRev;
q->next=NULL;
return p;
}
int main() {
//初始化链表
printf("初始化链表为:\n");
link *p = initLink();
display(p);
//判断链表是否为非递增有序,是删除同值多余元素并就地逆置,否则输出相应信息
if(panduan(p)==1){
p=shanchuduoyu(p);
p=ReverseList(p);
display(p);
}
return 0;
}
运行结果及报错内容
初始化链表为:
5 4 3 2
5432
我想要达到的结果
程序运行就结束了这是怎么回事?我希望程序能正常运行