TheAlgorithms-C/leetcode/src/234.c
2019-09-03 08:52:24 -07:00

39 lines
847 B
C

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode * reverse(struct ListNode *head) {
struct ListNode *res = NULL;
while(head) {
struct ListNode *pre_node = head;
head = head -> next;
pre_node ->next = res;
res = pre_node;
}
return res;
}
bool isPalindrome(struct ListNode* head){
struct ListNode *slow = head;
struct ListNode *fast = head;
struct ListNode *last;
while (fast && fast->next) {
slow = slow -> next;
fast = fast -> next -> next;
}
if(fast != NULL)
slow = slow -> next;
last = reverse(slow);
while(last) {
if (head->val != last->val)
return 0;
head = head -> next;
last = last -> next;
}
return 1;
}