16 篇文章 0 订阅

# 0.题目

Given the head of a singly linked list and two integers left and right where left <= right, reverse the nodes of the list from position left to position right, and return the reversed list.

Example 1:

Input: head = [1,2,3,4,5], left = 2, right = 4
Output: [1,4,3,2,5]
Example 2:

Input: head = [5], left = 1, right = 1
Output: [5]

Constraints:

The number of nodes in the list is n.
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n


# 1.递归反转整个链表

递归返回后，head的nextt仍指向反转链表末尾，修改末尾指针即可，而反转链表头部则从递归最深层逐渐传递出去。


# 2.反转链表前 N 个节点

 需记录最后一个反转点的下一个结点，作为头部的接点
special case:反转所有节点，此时下一个结点为NULL


# 3. 反转链表的一部分

只需逐步向前迭代，到达需反转的起点，即可调用2的反转链表前 N 个节点方法


# 4. 代码

/**
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode() : val(0), next(nullptr) {}
*     ListNode(int x) : val(x), next(nullptr) {}
*     ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* last=NULL;
ListNode* keep=NULL;
{
//只需反转其本身
if(num==1)
{

}
return last;

}
ListNode* start=NULL;
ListNode* reverseBetween(ListNode* head, int left, int right)
{

if(left==1)
{

}

else
{
}

}

};


• 0
点赞
• 0
评论
• 0
收藏
• 一键三连
• 扫一扫，分享海报

11-26 237
03-08 437
05-25 358
09-13 533
09-04 1111
06-17 185
05-22 255
02-17 1万+
06-26 353
05-14 543
09-04 4445
06-11 6298
01-17 264
04-04 364
05-10