题解 | #链表内指定区间反转#
链表内指定区间反转
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;
}
查看19道真题和解析
阿里巴巴公司氛围 653人发布