题目:
Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
解法:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
//用数组记录链表中每一个节点的地址,然后遍历数组即可实现回文判断
//由于链表中节点个数不知道,故采用动态分配数组的形式
bool isPalindrome(struct ListNode* head) {
struct ListNode **arr=(struct ListNode*)malloc(1*sizeof(struct ListNode*));
int num=0;
while(head)
{
arr[num]=head;
num++;
head=head->next;
arr=(struct ListNode*)realloc(arr,(1+num)*sizeof(struct ListNode*));
}
num--;
for(int i=0;i<num;i++)
{
if(arr[i]->val!=arr[num]->val)
{
free(arr);
return false;
}
num--;
}
free(arr);
return true;
}