LeetCode 92. 反转链表 II
思路
将子链表切割下来并记录左节点前一个节点pre和右节点下一个节点sucess
反转子链表后,pre指向反转后的子链表,左节点(此时为子链表的尾节点指向sucess)
/**
* 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* reverse(ListNode* head) {
ListNode* res = new ListNode(0);
while (head) {
ListNode* temp = head ->next;
head ->next = res ->next;
res ->next = head;
head = temp;
}
return res -> next;
}
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode* res = new ListNode(-1);
res ->next = head;
ListNode* leftNode;
ListNode* rightNode;
ListNode* cur = res;
ListNode* pre;
ListNode* success;
for (int i = 0; i < left - 1; i++) {
cur = cur ->next;
}
pre = cur;
leftNode = pre ->next;
for (int i = 0; i < right - left + 1; i ++) {
cur = cur ->next;
}
rightNode = cur;
success = rightNode ->next;
//分割
ListNode* temp = new ListNode(0);
temp ->next = leftNode;
rightNode ->next = nullptr;
ListNode* mid = reverse(leftNode);
pre ->next = mid;
leftNode ->next = success;
return res ->next;
}
};
分类:
LeetCode刷题
, 链表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix