Leetcode-234. Palindrome Linked List

来源:互联网 发布:mac book需要wpa2密码 编辑:程序博客网 时间:2024/05/20 05:07

## 题目

判断一个链表是不是回文

思路

先寻找链表的中间节点,然后反转中间节点及以后的节点,得到一个反转链表,比较原链表和反转链表即可。时间复杂度O(n),空间复杂度O(1)

代码

class Solution {public:    bool isPalindrome(ListNode* head) {        if(NULL == head || NULL == head->next)            return true;        //找中间节点        ListNode *p_fast = head, *p_slow = head;        while(p_fast && p_fast->next) {            p_fast = p_fast->next->next;            p_slow = p_slow->next;        }        //反转中间节点及以后的节点        ListNode *p = p_slow, *q = p->next, *t;        p->next = NULL;        while (q) {            t = q->next;            q->next = p;            p = q;            q = t;        }        //比较        ListNode* p1 = head;        while(p){            if(p->val != p1->val)                return false;            p = p->next;            p1 = p1->next;        }        return true;    }};
0 0