欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

92.反转链表II

时间:2023-05-29

思路
局部反转链表:头插法
定义两个指针,分别称之为 g(guard 守卫) 和 p(point)。 首先根据方法的参数 m 确定 g 和 p 的位置。将 g 移动到第一个要反转的节点的前面,将 p 移动到第一个要反转的节点的位置上。以 m=2,n=4为例。将 p 后面的元素删除,然后添加到 g 的后面。也即头插法。
3、根据 m 和 n 重复步骤(2)
4、返回 dummyHead.next

class Solution {public: ListNode* reverseBetween(ListNode* head, int left, int right) { ListNode* dummyNode = new ListNode(0); dummyNode->next = head; ListNode* g = dummyNode;//初始化指针 ListNode* p = dummyNode->next; for(int i = 0; i < left - 1; ++i)//找到 局部反转链表 的左边界 { g = g->next;//将 g 移动到第一个要反转的节点的前面 p = p->next;//将 p 移动到第一个要反转的节点的位置上 } for(int i = 0; i < right - left; ++i)//头插法插入节点 { ListNode* removed = p->next; p->next = p->next->next; removed->next = g->next; g->next = removed; } return dummyNode->next; }};

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。