反转链表II题目链接
题目大意
给你单链表的头指针
h
e
a
d
head
head 和两个整数
l
e
f
t
left
left 和
r
i
g
h
t
right
right ,其中
l
e
f
t
left
left <=
r
i
g
h
t
right
right 。请你反转从位置
l
e
f
t
left
left 到位置
r
i
g
h
t
right
right 的链表节点,返回 反转后的链表 。
示例一:

输入: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;
}
};
本文介绍了一个C++实现的反转链表指定区间的算法。通过遍历链表找到待反转部分的起始节点,并进行反转操作,最后将反转后的链表重新连接起来。适用于链表长度在1至500之间的单链表。
625

被折叠的 条评论
为什么被折叠?



