题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode* p1 = head;
ListNode* p2 = nullptr;
ListNode* preverse = nullptr;
//头部插入一个结点
ListNode* newnode = new ListNode(0);
newnode->next = p1;
p1 = newnode;
head = p1;
//尾部插入一个结点
while(p1->next != nullptr)
{
p1 = p1->next;
}
newnode = new ListNode(0);
p1->next = newnode;
p1 = head;
m++;n++;
for(int i=1; i < m-1; i++)
{
p1 = p1->next;
}
p2 = p1;
p1 = p1->next;
for(int i=0; i<n-m+1; i++)
{
newnode = new ListNode(p1->val);
newnode->next = preverse;
preverse = newnode;
p1 = p1->next;
}
p2->next = preverse;
while(preverse->next != nullptr)
{
preverse = preverse->next;
}
preverse->next = p1;
p1 = head;
while(p1->next->next != nullptr)
{
p1 = p1->next;
}
p1->next = nullptr;
return head->next;
}
};


查看17道真题和解析
