链接: 题目地址
数组复制反转法
class Solution {
public:
bool isPail(ListNode* head) {
vector<int> nums;
//将链表元素取出一次放入数组
while(head != NULL){
nums.push_back(head->val);
head = head->next;
}
vector<int> temp = nums;
//准备一个数组承接翻转之后的数组
reverse(temp.begin(), temp.end());
for(int i = 0; i < nums.size(); i++){
//正向遍历与反向遍历相同
if(nums[i] != temp[i])
return false;
}
return true;
}
};
一些语法说明:
-
vector<int> temp = nums;
这段代码是将名为nums的vector容器复制到名为temp的vector容器中。在C++中,vector是一个动态数组,它可以根据需要自动调整其大小。使用赋值运算符或复制构造函数可以将一个vector容器复制到另一个vector容器中。在这里,使用复制构造函数将nums复制到temp中。需要注意的是,这里的复制是深拷贝,即将nums中的元素逐一复制到temp中,而不是简单地将temp指向nums。这样做是为了确保temp与nums是独立的,对temp的修改不会影响nums,保证程序的正确性。
-
reverse(temp.begin(), temp.end());
这段代码是将vector容器中的元素反转,即将容器的第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,以此类推。在C++中,可以使用标准库中的reverse()函数来实现容器元素的反转。在这里,使用reverse()函数将名为temp的vector容器中的元素反转。函数的第一个参数是需要反转的容器的起始位置,即第一个元素的位置,而第二个参数是需要反转的容器的结束位置,即最后一个元素的下一个位置。通过这样的参数设置,reverse()函数将反转容器中的所有元素。
-
在这个特定的代码片段中,if语句只包含一条语句,因此可以不使用花括号。如果if语句包含多条语句,则必须使用花括号将这些语句组成一个块。尽管可以不使用花括号,但为了代码的可读性和易于维护,建议在if语句中始终使用花括号,即使只包含一条语句。这样可以防止在添加更多语句时出现错误,并且可以使代码更易于阅读和理解。
数组复制双指针
class Solution {
public:
bool isPail(ListNode* head) {
vector<int> nums;
//将链表元素取出一次放入数组
while(head != NULL){
nums.push_back(head->val);
head = head->next;
}
//双指针指向首尾
int left = 0;
int right = nums.size() - 1;
//分别从首尾遍历,代表正序和逆序
while(left <= right){
//如果不一致就是不为回文
if(nums[left] != nums[right])
return false;
left++;
right--;
}
return true;
}
};