不知道哪里不对,输入“1 2 2 1”输出却是“false”,而且检查了,逆置函数没错误的
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<stdbool.h>
#define LEN sizeof(struct LinkList)
struct LinkList
{
int num;
struct LinkList* next;
};
int main()
{
bool IfPalind(struct LinkList* A);
void Creat(struct LinkList* L);
struct LinkList* L, * check;
L = (struct LinkList*)malloc(LEN); L->next = NULL;
Creat(L);
if (IfPalind(L))
printf("true\n");
else
printf("false\n");
check = L->next;
while (check)
{
printf("%d", check->num);
check = check->next;
}
return 0;
}
void Creat(struct LinkList *L)
{
char c='\0'; int x;
struct LinkList* p, * rear;
rear = L;
while (c != '\n')
{
scanf_s("%d", &x);
c = getchar();
p = (struct LinkList*)malloc(LEN);
p->num = x;
p->next = NULL;
rear->next = p;
rear = p;
}
rear->next = NULL;
}
bool IfPalind(struct LinkList* A)
{
struct LinkList* mid, * fast, * p, * q, * head_new, * cur;
mid = fast = A->next;
while (fast&&fast->next != NULL&&fast->next->next!=NULL)
{
mid = mid->next;
fast = fast->next->next;
}
head_new = mid; p = mid->next; q = p->next; head_new->next = NULL;
while (q)
{
p->next = head_new->next;
head_new->next = p;
p = q;
q = q->next;
}
p->next = head_new->next;
head_new->next = p;
cur = A; mid = mid->next;
for(;mid;)
{
if (cur->num == mid->num)
{
cur = cur->next;
mid = mid->next;
}
else
break;
}
if (mid)
return false;
else
return true;
}