反转链表II题目链接题目大意
给你单链表的头指针 和两个整数 和 ,其中 <= 。请你反转从位置 到位置 的链表节点,返回 反转后的链表 。
示例一:
输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]
提示:
- 链表中节点数目为 n
- 1 <= n <= 500
- -500 <= Node.val <= 500
- 1 <= left <= right <= n
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right) {
if(left == right) return head;
ListNode* p = new ListNode(0);
p->next = head;
ListNode* L = p;
for(int i = 0; i < left - 1; i++) L = L->next; //遍历到 left - 1 的位置
ListNode* x = L;
ListNode* a = x->next;
ListNode* b = a->next;
for(int i = 0; i < right - left; i++) //翻转元素 右边指向左边
{
ListNode* t = b->next;
b->next = a;
a = b;
b = t;
}
//连接翻转后的元素
x->next->next = b;
x->next = a;
return p->next;
}
};