有一单链表L,用于存放整数序列,设计一个算法判断该序列是否是对称的。若是输出1,否则输出0。
输入格式:
有多组数据,每组第一行为单链表元素个数n(0<n<50);第二行为单链表的各元素。
输出格式:
若序列对称输出1,否则输出0。
输入样例:
在这里给出一组输入。例如:
6
1 2 3 3 2 1
7
1 2 3 4 3 2 1
结尾无空行
输出样例:
在这里给出相应的输出。例如:
1
1
结尾无空行
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 50
typedef struct SqStack{
int data[MAXSIZE];
int max;
int min;
}SqStack;
int main(){
int n,i;
while(scanf("%d",&n)!=EOF){
int flag=1;
SqStack *s;
s = (SqStack*)malloc(sizeof(SqStack));//注意使用s之气要先开辟空间,否则会造成段错误
s->min=0;
s->max=n-1;
for(i=0;i<n;i++){
scanf("%d",&s->data[i]);
}
while(s->max>=s->min){//进行遍历判断
if(s->data[s->min]==s->data[s->max]){
s->min++;s->max--;
}
else{
flag=0;
break;
}
}
if(flag)
printf("1\n");
else
printf("0\n");
}
return 0;
}
思路:首先创建一个栈,将数据存入栈中。将s->min和s->max分别设置为0和n-1,分别用于指向栈中第一个数据和最后一个数据。设置变量flag初始化为1用于标记是否对称。开始进行遍历判断,当s->min和s->max指向的的数据不相等的时候就令flag为0。最后根据flag的值进行相对应的输出。