647. 回文子串
![在这里插入图片描述](https://img-blog.csdnimg.cn/c58a3afda96f4872b972f20b245eacf4.png)
class Solution {
public:
int countSubstrings(string s) {
vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));
int res = 0;
for (int i = s.size() - 1; i >= 0; i--)
{
for (int j = i; j < s.size(); j++)
{
if (s[i] == s[j])
{
if (j - i <= 1)
{
res++;
dp[i][j] = true;
}
else if (dp[i + 1]dp[j - 1])
{
res++;
dp[i][j] = true;
}
}
}
}
return res;
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/2b93bdc9267e4f16ab46809a324e54cd.png)
5. 最长回文子串
![在这里插入图片描述](https://img-blog.csdnimg.cn/e719c19798b24119a34a06c5518d8812.png)
class Solution {
public:
vector<string> res;
public:
string longestPalindrome(string s) {
for (int i = 0; i < s.size(); i++)
{
extend(s, i, i);
extend(s, i, i + 1);
}
string temp;
for (int i = 0; i < res.size(); i++)
{
if (res[i].size() > temp.size())
{
temp = res[i];
}
}
return temp;
}
void extend(string s, int i, int j)
{
while (i >= 0 && j < s.size() && s[i] == s[j])
{
res.push_back(string(s.begin() + i, s.begin() + j + 1));
i--;
j++;
}
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/ba831799ab5340fcbcdbea1e3cb052fe.png)
92. 反转链表 II
![在这里插入图片描述](https://img-blog.csdnimg.cn/7df0f76ed32b445c816e64fcf0b2361c.png)
class Solution
{
public:
ListNode* reverseBetween(ListNode* head, int left, int right)
{
vector<int> vec;
ListNode* cur = head;
while (cur != nullptr)
{
vec.emplace_back(cur->val);
cur = cur->next;
}
reverse(vec.begin() + left - 1, vec.begin() + right);
ListNode* dummy_node = new ListNode(0);
ListNode* temp = dummy_node;
for (int i = 0; i < vec.size(); i++)
{
temp->next = new ListNode(vec[i]);
temp = temp->next;
}
return dummy_node->next;
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/52ecd42649dd4e029c4ef88091e5066e.png)
143. 重排链表
![在这里插入图片描述](https://img-blog.csdnimg.cn/b4816abe75ba46a7970bf189b4fabb20.png)
class Solution {
public:
ListNode* middNode(ListNode* head)
{
ListNode* slow = head;
ListNode* fast = head;
while (fast->next != nullptr && fast->next->next != nullptr)
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
ListNode* reverseList(ListNode* head)
{
ListNode* pre = nullptr;
ListNode* cur = head;
while (cur != nullptr)
{
ListNode* temp = cur->next;
cur->next = pre;
pre = cur;
cur = temp;
}
return pre;
}
void mergeList(ListNode* l1, ListNode* l2)
{
ListNode* l1_temp;
ListNode* l2_temp;
while (l1 != nullptr && l2 != nullptr)
{
l1_temp = l1->next;
l2_temp = l2->next;
l1->next = l2;
l1 = l1_temp;
l2->next = l1;
l2 = l2_temp;
}
}
public:
void reorderList(ListNode* head) {
if (head == nullptr)
{
return;
}
ListNode* mid = middNode(head);
ListNode* l1 = head;
ListNode* l2 = mid->next;
mid->next = nullptr;
l2 = reverseList(l2);
mergeList(l1, l2);
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/dc576b5565464565bfcabc081bc46e71.png)
148. 排序链表
![在这里插入图片描述](https://img-blog.csdnimg.cn/e895d7e6e0b6482ab9f16d2dd1639fef.png)
class Solution {
public:
ListNode* sortList(ListNode* head) {
vector<int> vec;
ListNode* cur = head;
while (cur != nullptr)
{
vec.emplace_back(cur->val);
cur = cur->next;
}
sort(vec.begin(), vec.end());
ListNode* dummy_node = new ListNode(0);
ListNode* temp = dummy_node;
for (int i = 0; i < vec.size(); i++)
{
temp->next = new ListNode(vec[i]);
temp = temp->next;
}
return dummy_node->next;
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/48de6819598c4e2db334c6fc50898a71.png)
19. 删除链表的倒数第 N 个结点
![在这里插入图片描述](https://img-blog.csdnimg.cn/6dd6de3fcefa46b5905a4f4c5d9c4e13.png)
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* cur = head;
int n1 = 0;
while (cur != nullptr)
{
n1++;
cur = cur->next;
}
if(n1 == 1) return nullptr;
int m = n1 - n + 1;
cur = head;
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* pre = dummy;
m--;
while (m-- && cur != nullptr)
{
pre = cur;
cur = cur->next;
}
pre->next = cur->next;
return dummy->next;
}
};
![在这里插入图片描述](https://img-blog.csdnimg.cn/7a1337e92d414f18b2d77143b4b7a7de.png)