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;
}
};
本文介绍了一种通过翻转链表后半部分并比较前后两部分来判断单链表是否为回文的方法。该方法首先找到链表的中点,接着翻转后半部分的链表,并将其与前半部分进行比较。
519

被折叠的 条评论
为什么被折叠?



