leetcode_c++:链表:Palindrome Linked List(234)

来源:互联网 发布:先导爱知同人吧 编辑:程序博客网 时间:2024/05/18 13:12

Given a singly linked list, determine if it is a palindrome.
// 判断是否链表是回文


时间:O(n)
空间:O(1)

//先将一般翻转,然后两个指针向两边走


class Solution {public:    ListNode* findMiddle(ListNode* head){        ListNode* p1=head,*p2=head;        while(p2 &&p2->next ){            p1=p1->next;            p2=p2->next->next;        }        return p1;    }    ListNode* reverseLink(ListNode* head){        ListNode* p=NULL;        while(head){            ListNode* q=head->next;            head->next=p;            p=head;            head=q;        }        return p;    }    bool isPalindrome(ListNode* head) {        ListNode* pMid=findMiddle(head);        ListNode* pRev=reverseLink(pMid);        for(;head!=pMid;head=head->next,pRev=pRev->next){            if(head->val!=pRev->val)                return false;        }        return true;    }};
0 0
原创粉丝点击