编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
void reverseString(vector<char>& s) {
int n = s.size();
for(int i=0;i<n/2;++i){
swap(s[i],s[n-1-i]);
}
}
};
给定一个字符串 s
,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
class Solution {
public:
string reverseWords(string s) {
int st=0;
int ed=st;
int n=s.size();
while(ed<(n-1)){
++ed;
if(s[ed]==' '){
for(int i=0;i<(ed-st)/2;++i){
swap(s[st+i],s[ed-1-i]);
}
st=ed+1;
}
}
++ed;
for(int i=0;i<(ed-st)/2;++i){
swap(s[st+i],s[ed-1-i]);
}
return s;
}
};
给定一个头结点为 head
的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
/**
* 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* middleNode(ListNode* head) {
ListNode *p = head->next;
int count = 0;
while(p!=nullptr){
++count;
p = p->next;
}
int mid = (count+1)/2;
p = head;
for(int i=0;i<mid;++i){
p=p->next;
}
return p;
}
};
给定一个头结点为 head
的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
/**
* 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) {
ListNode* temp =new ListNode(0,head);
ListNode* st = head;
ListNode* ed = temp;
for(int i=0;i<n;++i){
st = st->next;
}
while(st){
st = st->next;
ed = ed->next;
}
ed->next=ed->next->next;
ListNode* t = temp->next;
delete temp;
return t;
}
};