文章目录
- 例题
- 1. 21.斐波那契数列
- 2. 16.替换空格
- 3. 84.1+2+3+...+n
- 4. 28.O(1)时间删除链表结点
- 5. 36.合并两个排序的链表
例题
1. 21.斐波那契数列
Acwing 21.斐波那契数列
class Solution {
public:
int Fibonacci(int n) {
if(n <= 1) return n;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
};
2. 16.替换空格
Acwing 16.替换价格
class Solution {
public:
string replaceSpaces(string &str) {
string res;
for (auto c : str)
if (c == ' ') res += "%20";// 在字符串后面增加%20
else res += c;
return res;
}
};
3. 84.1+2+3+…+n
Acwing 84.1+2+3+…+n
class Solution {
public:
int getSum(int n) {
int res = n;
n > 0 && (res += getSum(n - 1));
return res;
}
};
4. 28.O(1)时间删除链表结点
Acwing 28.删除链表结点
class Solution {
public:
void deleteNode(ListNode* node) {
node->val = node->next->val;// 伪装成下一个点
node->next = node->next->next;// 将下一个点删掉
}
};
5. 36.合并两个排序的链表
Acwing 36.合并两个排序的链表
class Solution {
public:
ListNode* merge(ListNode* l1, ListNode* l2) {
auto dumpy = new ListNode(-1), tail = dumpy;// dumpy是头结点,赋值给头结点,dumpy生成一个新的链表
while(l1 && l2)
if(l1->val < l2->val)
{
// 一般来说
tail->next = l1;// tail表示头结点,tail->next才表示第1个结点,l1表示第1个结点
tail = tail->next;// tail指向下一位
l1 = l1->next;// l1向后移动一位
}
else
{
tail->next = l2;
tail = tail->next;
l2 = l2->next;
}
if(l1) tail->next = l1;//最后剩下的一个
if(l2) tail->next = l2;
return dumpy->next;// 返回虚拟头结点的下一个结点
}
};