描述
本题是力扣的92. 反转链表 II
考点
-
链表的反转
题解
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode *dummyHead = new ListNode(-1, head), *subDummy = dummyHead;
for (int i = 0; i < left - 1; i++) subDummy = subDummy->next;
//使用改进版头插法进行子链表反转
ListNode *tail = subDummy->next;
for (int i = 0; i < right - left; i++) {
ListNode *node = tail->next;
tail->next = node->next;
node->next = subDummy->next;
subDummy->next = node;
}
return dummyHead->next;
}
};
思路
找到子链表的头节点,并将其前一个节点作为伪节点,即subDummy
;再使用206. 反转链表
提到的改进版头插法
即可
更多
恭喜你完成本题!
你可以选择继续下一题,或移步至仓库开始更多类型的挑战:https://fi3wey.github.io/
仓库内包含了更多经典案例的逻辑剖析与实现细节,助你在算法的学习之旅上一往无前!
看官若还满意,还请Star一下哟~
关注公众号峰狂算法
,获取最新的刷题指导呀~