LintCode_223 Palindrome Linked List

来源:互联网 发布:mac如何切换搜狗输入法 编辑:程序博客网 时间:2024/06/03 14:13

Implement a function to check if a linked list is a palindrome.

Example

Given 1->2->1, return true

Challenge 

Could you do it in O(n) time and O(1) space?


找到中间点, 然后开始检查:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    /**     * @param head a ListNode     * @return a boolean     */    bool isPalindrome(ListNode* head) {        // Write your code here        if (head == NULL || head->next == NULL)            return true;        int len = 0;        ListNode* node = head;        while (node != NULL) {            len++;            node = node->next;        }        int half_len = 0;        int first_end = 0;        if (len % 2 == 0) {            half_len = len / 2 + 1;            first_end = len / 2;        } else {            half_len = len / 2 + 2;            first_end = len / 2;        }        ListNode* half_start = head;        int i = 1;        while (i != half_len) {            half_start = half_start->next;            i++;        }        node = head;        stack<int> stk;        for (int i = 1; i <= first_end; i++) {            stk.push(node->val);            node = node->next;        }        while (half_start != NULL) {            if (half_start-> val != stk.top()){                return false;            } else {                stk.pop();                half_start = half_start->next;            }        }        return true;    }};


0 0
原创粉丝点击