回文即就是 “123454321”,“abcba"满足这样的数据链表,需要两个指针,一个指向头,一个指向尾,一个向后走,一个向前走,判断数据是否相等。但是单链表无法从后节点指向前节点,因此将单链表中数据拷贝到数组中进行判断。
代码实现如下:
//判断单链表是否回文
bool IsPail(PNode plist)
{
//需要两个指针,一个指向头,一个指向尾,一个向后走,一个向前走,判断数据是否相等
//单链表无法从后节点指向前节点,因此将单链表中数据拷贝到数组中进行判断
int len = Get_length(plist);
ELEM_TYPE* tmp = (ELEM_TYPE*)malloc(len * sizeof(ELEM_TYPE));
assert(tmp != NULL);
int i = 0;
for (PNode p = plist; p->next = NULL; p = p->next)
{
tmp[i++] = p->data;
}
int left = 0;
int right = len - 1;
while (left < right)
{
if (tmp[left] != tmp[right])
{
return false;
}
}
return true;
}