题解 | #链表内指定区间反转#
链表内指定区间反转
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; } };