class Solution {
public:
bool isPalindrome(string s) {
//大写变小写,去掉字符串中的所有符号
if(s.length()==0) return true;
//使用tolower,可以将大写字符变成小写,使用ispunct()判断是否是标点符号,isspace()判断是否为空格
string result="";
for(char c: s){
c=tolower(c);//将大写字母变成小写字母
if(!ispunct(c)&&!isspace(c))//去掉空格和标点符号
{
result+=c;
}
}
//双指针判断
int first=0,last=result.length()-1;
while(first<=last){
if(result[first]==result[last]){
first++;
last--;
}
else{
return false;
}
}
return true;
}
};
class Solution {
public:
int strStr(string haystack, string needle) {
//返回needle字符串第一次出现在haystack中的位置,没有出现则返回-1
//但是要注意needle字符串必须完全在needle字符串必须完全在haystack字符串中出现
//第一步是要判断是否包含,第二步返回第一次出现的位置
int pos=haystack.find(needle);
bool flag=true;;
if(pos>=0){
return pos;
}
else{
return -1;
}
}
};
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
//如果节点为空,或者是尾结点,无法删除
if(node==nullptr || node->next==nullptr) return;
node->val=node->next->val;
//将当前节点的值更新为下一个节点的值
node->next=node->next->next;
//将当前节点的指针指向下一个节点的指针
}
};
/**
* 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) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
//删除链表的倒数第n个节点
//快慢指针
if((head==nullptr)||(head->next==nullptr)&&(n==1)){
return nullptr;
// 如果链表为空或只有一个节点,直接返回空指针
}
ListNode *fast=head;
ListNode *slow=head;
//先让快指针领先慢指针
for(int i=0;i<n;i++){
fast=fast->next;
}
while(fast==nullptr){
head=head->next;
delete slow;
return head;
}
while(fast->next!=nullptr){
fast=fast->next;
slow=slow->next;
}
ListNode*temp= slow->next;
slow->next=slow->next->next;
delete temp;
return head;
}
};
以上是10.22 LeetCode 每日一题打卡。