一、92题反转链表Ⅱ
/**
* 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* reverseBetween(ListNode* head, int left, int right)
{
ListNode* t_ptr = new ListNode(-1);
t_ptr->next = head;
ListNode* prev = t_ptr;
//拿到left前一个数的位置,注意不能用left--循环,下面还要用到left。这里被自己坑过
for (int i = 0; i < left - 1; i++)
{
prev = prev->next;
}
//拿到left位置,也是第一个数
ListNode* First = prev->next;
//拿到First后面的数
ListNode* next;
int num = right - left;
while(num--)
{
next = First->next;
First->next = next->next;
next->next = prev->next;
prev->next = next;
}
return t_ptr->next;
}
};
二、1603、设计停车系统
过于简单就不写了
三、150、逆波兰表达式求值
class Solution {
public:
stack<int> s;
int evalRPN(vector<string>& tokens)
{
int len = tokens.size();
for(int i = 0; i < len; i++)
{
string token = tokens[i];
if(isNumber(token))
{
s.push(atoi(token.c_str()));
}
else
{
int num1 = s.top();
s.pop();
int num2 = s.top();
s.pop();
int result;
if(token[0] == '+')
{
result = num2 + num1;
}
else if(token[0] == '-')
{
result = num2 - num1;
}
else if(token[0] == '*')
{
result = num2 * num1;
}
else if(token[0] == '/')
{
result = num2 / num1;
}
s.push(result);
}
}
return s.top();
}
bool isNumber(string& token) {
return !(token == "+" || token == "-" || token == "*" || token == "/");
}
};
四、1800、最大升序子数组和
过于简单就不写了
五、1802、有界数组中指定下标处的最大值
略难,等等的