刷题--回文链表

1.暴力解法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
#include <vector>
class Solution {
public:
bool isPalindrome(ListNode* head) {
ListNode* tempnode = head;
std::vector<int> val_list;
while (tempnode != nullptr) {
val_list.push_back(tempnode->val);
tempnode = tempnode->next;
}
for (int i = 0; i < val_list.size(); i++) {
if (val_list[i] != val_list[val_list.size() - (i + 1)])
return false;
}
return true;
}
};
2.暴力解法-双指针法
class Solution {
public:
bool isPalindrome(ListNode* head) {
std::vector<int> vals;
// Step 1: 把链表值复制进数组
while (head) {
vals.push_back(head->val);
head = head->next;
}
// Step 2: 双指针判断是否是回文
int left = 0, right = vals.size() - 1;
while (left < right) {
if (vals[left] != vals[right]) return false;
++left;
--right;
}
return true;
}
};

浙公网安备 33010602011771号