48 lines
762 B
C
48 lines
762 B
C
#include "practice.h"
|
|
#include "../../utils/lists.h"
|
|
#include "../basics/basics.h"
|
|
|
|
int is_palindrome(struct dlist *l)
|
|
{
|
|
if (!l || l->next != NULL) return 1;
|
|
|
|
struct dlist *tmp = l;
|
|
int indexb = 0;
|
|
|
|
while (tmp->next != NULL) {
|
|
|
|
indexb ++;
|
|
tmp = tmp->next;
|
|
}
|
|
|
|
|
|
struct dlist *back = tmp;
|
|
tmp = l;
|
|
int indexp = 0;
|
|
|
|
while (indexp < indexb){
|
|
|
|
if (tmp->data != back->data) return 0;
|
|
|
|
indexp ++;
|
|
indexb --;
|
|
|
|
tmp = tmp->next;
|
|
back = back->prev;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
struct list *reverse(struct list *l)
|
|
{
|
|
struct list *tmp =l;
|
|
struct list *rslt = NULL;
|
|
while(l != NULL){
|
|
rslt = list_append(rslt, l->data);
|
|
l = l->next;
|
|
}
|
|
|
|
return rslt;
|
|
}
|