题目考查的知识点
- 递归翻转链表
- 双指针
- 链表的断链与重连
题目解答方法的文字解析
aaaaaa->bbbbbb->ccccccc
其中“bbbbbb”是链表中需要反转的部分
- pH和pT指针初始化为head
- 移动pH和pT指针,使得指向要反转的链表的头节点和尾节点
- 使用递归反转链表“bbbbbb”
- 重新连接链表“ccccccc”
本题解析所用的编程语言
- c++
完整且正确的编程代码
/*
aaaaaa->bbbbbb->ccccccc
其中“bbbbbb”是链表中需要反转的部分
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode*pH = head, *pT = head, *dummyHead=new ListNode(-1), *prev = dummyHead;
dummyHead->next = head;
right -= left;
--left;
while(left--){
prev = pH;
pH = pH->next;
}
pT = pH;
while(right--){
pT = pT->next;
}
ListNode*resual = pT->next;// 被翻转的链表的后半部分"ccccccc"
pT->next = nullptr;
prev->next = helper(pH);// 获得反转后的"bbbbbb", 并让"aaaaaa"连接上这部分
pH->next = resual;// 连接后半部分"ccccccc"
return dummyHead->next;
}
// 翻转链表
ListNode* helper(ListNode* head) {
if (head == nullptr || head->next == nullptr)return head;
ListNode* ret = helper(head->next);
ListNode* hNext = head->next;
head->next = nullptr;
hNext->next = head;
return ret;
}
};



京公网安备 11010502036488号