[LeetCode]Palindrome Linked List

来源:互联网 发布:医药魔方销售数据库 编辑:程序博客网 时间:2024/06/02 13:48

Given a singly linked list, determine if it is a palindrome.

利用之前完成的link 翻转。首先找到中间节点,然后对后半link翻转和前半段对比。如果一样说明link是回文。

/** * 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 = head;        ListNode *slow = head;        ListNode *head1 = head;        while(fast->next&&fast->next->next){            fast = fast->next->next;            slow = slow->next;        }        ListNode *temp = reverseList(slow->next);//翻转后半段link        while(temp){            if(head1->val != temp->val){                return false;            }            head1 = head1->next;            temp = temp->next;        } //对比        return true;    }            ListNode* reverseList(ListNode* head) {        if(head==NULL)            return NULL;        ListNode* pre = new ListNode(-1);        pre->next = head;        ListNode* cur = head;        ListNode* nex = head;        while(cur->next){            nex = cur->next;            cur->next = nex->next;            nex->next = pre->next;            pre->next = nex;        }        return pre->next;    }};


0 0
原创粉丝点击