目录
题目叙述
题解代码
class Solution {
public:
/*反转链表函数,操作即206反转链表*/
void reverseList(ListNode* head){
ListNode* pre = NULL;
ListNode* cur = head;
while(cur != NULL)
{
ListNode* tmp = cur->next;
cur->next = pre;
pre = cur;
cur = tmp;
}
}
ListNode* reverseBetween(ListNode* head, int left, int right) {
//设置虚拟头结点更加方便操作
ListNode* dummyNode = new ListNode(-1);
dummyNode->next = head;
ListNode* pre = dummyNode;
//找到 left-1 位置结点
for(int i= 0; i < left - 1; i++)
{
pre = pre->next;
}
ListNode* rightNode = pre;
//找到 right+1 位置结点
for(int i = 0; i < right - left + 1; i++)
{
rightNode = rightNode->next;
}
ListNode* leftNode = pre->next;
ListNode* curr = rightNode->next;
pre->next = NULL; //在 left-1 处断开
rightNode->next = NULL; //在 right+1 处断开
//反转 left-right 这一段内的结点
reverseList(leftNode);
//将反转后的结点重新接回去
pre->next = rightNode;
leftNode->next = curr;
//返回反转后的头指针
return dummyNode->next;
}
};
提交结果