Update pset0
This commit is contained in:
parent
d2f2268cf2
commit
85c1e39dc8
|
@ -1,59 +1,52 @@
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
typedef struct stack {
|
typedef struct listNode {
|
||||||
int val;
|
int id;
|
||||||
struct stack *next;
|
struct listNode *next;
|
||||||
} stack;
|
} listNode;
|
||||||
|
|
||||||
stack *push(stack *st, int val) {
|
listNode *appendNode(int id, listNode *head) {
|
||||||
stack *new = malloc(sizeof(stack));
|
listNode *new = malloc(sizeof(listNode));
|
||||||
new->next = st;
|
new->id = id;
|
||||||
new->val = val;
|
new->next = NULL;
|
||||||
|
|
||||||
|
head->next = new;
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
int isEmpty(stack *st) { return st == NULL; }
|
|
||||||
|
|
||||||
int peek(stack *st) { return st->val; }
|
|
||||||
|
|
||||||
stack *pop(stack *st) {
|
|
||||||
stack *tmp = st->next;
|
|
||||||
free(st);
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
stack *st = NULL;
|
listNode* head = malloc(sizeof(listNode));
|
||||||
|
listNode* ptr = head;
|
||||||
|
|
||||||
int size = 0;
|
int size = 0;
|
||||||
int in;
|
int buf;
|
||||||
int last;
|
while ((scanf("%d,", & buf) != EOF)) {
|
||||||
int lastUsed = 0;
|
ptr = appendNode(buf, ptr);
|
||||||
int centFound = 0;
|
|
||||||
|
|
||||||
while (scanf("%d,", &in) != EOF) {
|
|
||||||
size++;
|
size++;
|
||||||
if (!isEmpty(st) && peek(st) == in) {
|
|
||||||
st = pop(st);
|
|
||||||
} else if (lastUsed == 1 && last == in) {
|
|
||||||
st = pop(st);
|
|
||||||
st = pop(st);
|
|
||||||
centFound = 1;
|
|
||||||
} else {
|
|
||||||
if (!isEmpty(st)) {
|
|
||||||
last = peek(st);
|
|
||||||
lastUsed = 1;
|
|
||||||
}
|
}
|
||||||
// printf("PUSHING: %d\n", in);
|
|
||||||
st = push(st, in);
|
if (size <= 1) {
|
||||||
|
printf("Yes");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ans[size];
|
||||||
|
|
||||||
|
head = head->next;
|
||||||
|
for (int i = 0; i < size; i ++) {
|
||||||
|
ans[i] = head->id;
|
||||||
|
head = head->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
int isCentral = 1;
|
||||||
|
for (int i = 0, end = size / 2; i < end; i++) {
|
||||||
|
if (ans[i] != ans[size - i - 1]) {
|
||||||
|
isCentral = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size > 0 && isEmpty(st) && centFound == 1) {
|
if (isCentral == 1) {
|
||||||
printf("Yes");
|
|
||||||
} else if (size == 1) {
|
|
||||||
printf("Yes");
|
printf("Yes");
|
||||||
} else {
|
} else {
|
||||||
printf("No");
|
printf("No");
|
||||||
|
|
Loading…
Reference in a new issue