题目链接:https://leetcode.com/problems/palindrome-linked-list/
题目大意:给定一链表,判断是否是回文链表。
思路:取半,后半部分的链表进行反转。反转后的链表跟前半部分链表进行比较。
class Solution {
public:
bool isPalindrome(ListNode* head) {
ListNode *p = head;
int len = 0;
while(p){
len++;
p = p -> next;
}
ListNode *left = new ListNode(0);
ListNode *l = left;
for(int i = 1;i <= len / 2;i++){
l -> next = new ListNode(head -> val);
l = l -> next;
head = head -> next;
}
left = left -> next;
if(len % 2 == 1){
head = head -> next;
}
ListNode *pre = NULL;
ListNode *next = NULL;
for(int i = 1;i <= len / 2;i++){
next = head -> next;
head -> next = pre;
pre = head;
head = next;
}
while(left && pre){
if(left -> val != pre -> val){
return false;
}
left = left -> next;
pre = pre -> next;
}
return true;
}
};