【每日刷题】Day95
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com)
2. 面试题 02.05. 链表求和 - 力扣(LeetCode)
3. 1614. 括号的最大嵌套深度 - 力扣(LeetCode)
1. 链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com)
//思路:转数组反转。
//将链表转为数组,对数组反转,再将数组转为链表。
class Solution {
public:
//区间反转
void Reverse(int* arr,int left,int right)
{
while(left<right)
{
int tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
typedef ListNode LN;
ListNode* reverseBetween(ListNode* head, int m, int n)
{
LN* phead = head;
int arr[1001] = {0};
int count= 0;
//链表转数组
while(phead)
{
arr[count++] = phead->val;
phead = phead->next;
}
phead = head;
//反转数组
Reverse(arr,m-1,n-1);
//数组转链表
for(int i = 0;i<count;i++)
{
phead->val = arr[i];
phead = phead->next;
}
return head;
}
};
2. 面试题 02.05. 链表求和 - 力扣(LeetCode)
//思路:加法运算。
//遍历两个链表,计算每一位的大小存入新的链表中,判断是否进位。
class Solution {
public:
typedef ListNode LN;
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
LN* Sentry = new LN;
LN* pmove = Sentry;
int flag = 0;
while(l1||l2)
{
LN* newnode = new LN;
int ret1 = !l1?0:l1->val;
int ret2 = !l2?0:l2->val;
newnode->val = (ret1+ret2+flag)%10;
newnode->next = nullptr;
pmove->next= newnode;
pmove = pmove->next;
//进位
if(ret1+ret2+flag>=10)
flag = 1;
else
flag = 0;
if(l1)
l1 = l1->next;
if(l2)
l2 = l2->next;
}
//遍历完后flag还为1,则最高位为1
if(flag)
{
LN* newnode = new LN;
newnode->val = 1;
newnode->next = nullptr;
pmove->next = newnode;
}
return Sentry->next;
}
};
3. 1614. 括号的最大嵌套深度 - 力扣(LeetCode)
//思路:遍历+记数。记录最大值。
class Solution {
public:
int maxDepth(string s)
{
int ans = 0;
int tmp = 0;
for(int i = 0;i<s.size();i++)
{
//记录嵌套的"("
if(s[i]=='(')
{
tmp++;
//记录最大值
ans = ans>=tmp?ans:tmp;
}
//遇到")"抵消一个嵌套的"("
if(s[i]==')')
tmp--;
}
return ans;
}
};