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?
思路:将链表中的值赋值到一个整形数组中并对数组中的元素进行处理计算,判断是否为回文;
/**
* 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) {
int L[100000];
if(head == NULL)
return 1;
if(head->next == NULL)
return 1;
ListNode* p = head;
int i = 0;
while(p != NULL){
L[i] = p->val;
p = p->next;
i++;
}
i = i - 1;
for(int j = 0; j <= i; j++){
if(L[j] != L[i])
return 0;
i--;
}
return 1;
}
};
将整形数组改为vector容器;
vector L; //定义一个vector的整形容器L;
L.push_back(p->val);//将链表中p指向的元素的值压入L vector容器中;
/**
* 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) {
vector<int> L;
if(head == NULL)
return 1;
if(head->next == NULL)
return 1;
ListNode* p = head;
int i = 0;
while(p != NULL){
L.push_back(p->val);
p = p->next;
i++;
}
i = i - 1;
for(int j = 0; j <= i; j++){
if(L[j] != L[i])
return 0;
i--;
}
return 1;
}
};
但是利用vector容器会增加时间复杂度;