给你单链表的头指针 head
和两个整数 left
和 right
,其中 left <= right
。请你反转从位置 left
到位置 right
的链表节点,返回 反转后的链表 。
示例 1:
思路一:头插法
struct ListNode *reverseBetween(struct ListNode *head, int left, int right) {
struct ListNode *dummyNode = malloc(sizeof(struct ListNode));
dummyNode->val = -1;
dummyNode->next = head;
struct ListNode *pre = dummyNode;
for (int i = 0; i < left - 1; i++) {
pre = pre->next;
}
struct ListNode *cur = pre->next;
struct ListNode *next;
for (int i = 0; i < right - left; i++) {
next = cur->next;
cur->next = next->next;
next->next = pre->next;
pre->next = next;
}
return dummyNode->next;
}
分析:
本题根据left值将指针移动到目标节点前一位,再通过头插法将节点反转,最后返回链表文章来源:https://www.toymoban.com/news/detail-664718.html
总结:
本题考察链表的应用,运用头插法更改节点顺序即可解决文章来源地址https://www.toymoban.com/news/detail-664718.html
到了这里,关于leetcode做题笔记92. 反转链表 II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!