1. 程式人生 > >【C語言】LeetCode 234. Palindrome Linked List

【C語言】LeetCode 234. Palindrome Linked List

題目:

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;
}