题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
唯一一次超过100%用户
ListNode* reverseBetween(ListNode* head, int m, int n) { // write code here int i = 1; ListNode *p = head, *q = nullptr, *pHead = nullptr, *pre = nullptr; if(m == n) return head; while(i < m) { // 记录第m个数字的前一个节点的位置,如果m== 1,pre就是个空 pre = p; p = p->next; i++; } for(i = m; i <= n; i++) { // 构造个新的链表 if ( i == m) { pHead = new ListNode(p->val); q = pHead; // 新链表最后一个节点的位置 } else { ListNode *temp = new ListNode(p->val); temp->next = pHead; pHead = temp; // 新链表第一个节点的位置 } p = p->next; } // 两个链表进行拼接 if (m == 1) // 这里特别注意,不进行判断的端的pre就会是个空,没有输出 head = pHead; else pre->next = pHead; q->next = p; return head; }