Leetcode234 单链表+回文判断

来源:互联网 发布:淘宝二手手机店铺推荐 编辑:程序博客网 时间:2024/06/04 19:15

题意:给定一个单链表,问该单链表是否是回文单链表

要求:时间复杂度O(n),空间复杂度O(1)

题解:首先取单链表中间结点,将原单链表分成两部分,然后将后边一半逆置,再将两个链表一一对比,看看元素是否相等。

代码如下:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* midNode(ListNode* p){        ListNode* fast=p;        ListNode* slow=p;        while(fast->next!=NULL&&fast->next->next!=NULL){            //奇数时指向中间,偶数时指向中间偏右那个            fast=fast->next->next;            slow=slow->next;        }        fast=slow->next;        slow->next=NULL;        return fast;    }    ListNode* reverseNode(ListNode* p){        ListNode* current;        ListNode* pnext;        ListNode* prev;        current=p;        pnext=current->next;        current->next=NULL;        while(pnext){            prev=pnext->next;            pnext->next=current;            current=pnext;            pnext=prev;        }        p=current;        return p;    }    bool isPalindrome(ListNode* head) {        if(head==NULL||head->next==NULL){            return true;        }        //先找出中间那个数        ListNode* mid=midNode(head);        mid=reverseNode(mid);        ListNode* cur=head;        while(cur!=NULL&&mid!=NULL){            if(cur->val!=mid->val)               return false;            cur=cur->next;            mid=mid->next;        }        return true;    }};

0 0