Palindrome Linked List

来源:互联网 发布:网络ip地址冲突 编辑:程序博客网 时间:2024/06/01 07:27

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?

Subscribe to see which companies asked this question.

解析:

找到链表的中间位置,然后把后半段翻转,然后看每个元素是否相同


代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    bool isPalindrome(ListNode* head) {        if (head==NULL||head->next==NULL) return true;        ListNode* fast,*slow;        fast=head;        slow=head;        while(fast->next&&fast->next->next)        {            slow=slow->next;            fast=fast->next->next;        }        ListNode* tt=reverse(slow->next);        while(tt)        {            if (tt->val!=head->val)            return false;            tt=tt->next;            head=head->next;        }                return true;            }        ListNode* reverse(ListNode* head)    {        ListNode* pre=NULL;        ListNode* next=NULL;        while(head)        {            next=head->next;            head->next=pre;            pre=head;            head=next;                    }        return pre;    }        };


0 0
原创粉丝点击