【LeetCode】反转链表II
💐The Begin💐点点关注,收藏不迷路💐
|
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例 1:
输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1
输出:[5]
提示:
链表中节点数目为 n
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n
进阶: 你可以使用一趟扫描完成反转吗?
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
// 反转从 left 到 right 的链表节点
struct ListNode* reverseBetween(struct ListNode* head, int left, int right) {
if (head == NULL || left == right) {
return head;
}
struct ListNode dummy;
dummy.next = head;
struct ListNode *prev = &dummy;
// 找到反转起始位置的前一个节点
for (int i = 1; i < left; i++) {
prev = prev->next;
}
struct ListNode *curr = prev->next;
// 开始反转
for (int i = left; i < right; i++) {
struct ListNode *nextNode = curr->next;
curr->next = nextNode->next;
nextNode->next = prev->next;
prev->next = nextNode;
}
return dummy.next;
}
💐The End💐点点关注,收藏不迷路💐
|