有木有大佬知道为什么我的while循环只执行了一次便停止了

//判断一个无序数列是否为等差数列
#include <iostream>
using namespace std;
typedef struct node{
	int key;//key用来记录是否为等差,0代表是,1代表不是
	struct node* next;
}node,*Linklist;

void mysort(int a[],int n){
	int i,j,k,temp;
	for(i=0;i<n;i++){
		k=i;
		for(j=i+1;j<n;j++){
			if(a[j]<a[k]) k=j;
		}
		if(k!=i){
			temp=a[i];
			a[i]=a[k];
			a[k]=temp;
		}
	}
}

int main(){
	int n,i,num;
	Linklist L,p,q;
	L=(Linklist)malloc(sizeof(node));
	L->next=NULL;
	p=L;
	while(1){
		cout<<"输入n的值:";
		cin>>n;
		if(n==0){//n等于0代表输入结束,执行输出yes和no的语句
			p=L->next;
			while(p!=NULL){
				if(p->key==1)
					cout<<"yes";
				else if(p->key==0)
					cout<<"no";
				p=p->next;
			}
			break;
		}
		int a[1000];
		cout<<"输入数列中元素(元素两两之间以空格隔开):";
		for(i=0;i<n;i++){
			cin>>a[i];
		}
		mysort(a,n);
		q=(Linklist)malloc(sizeof(node));
		q=p->next;
		q->next=NULL;
		num=a[1]-a[0];
		for(i=1;i<n;i++){
			if(a[i]-a[i-1]!=num){//说明不是等差数列,直接跳出
				q->key=0;
				break;
			}
		}
		if(i==n){//说明是等差
			q->key=1;
		}
		p=q;
	}
	return 0;
}

 

你这个程序是错误退出,最好的最简单的办法就是cout调试

你这个有很多错误:

1、你排序写的不对,会导致溢出,排序有很多,去学学怎么写

2、内存分配会出现错误