/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
//部分逆置,一定要掌握
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode* help = new ListNode(0); //添加一个头结点
help->next = head;
ListNode* prior = help;
int i = 1;
for (; i < m && prior; ++i)
prior= prior->next;
reverse(prior, n - i + 1);
return help->next;
}
private:
void reverse(ListNode* prior, int num){
ListNode* tail = prior->next;//第一个结点会变成最后一个结点
ListNode* ptr = prior->next;
for (int i = 0; i < num && ptr; ++i){
ListNode* tmp = ptr->next;
ptr->next = prior->next;
prior->next= ptr;
ptr = tmp;
if ( i == num - 1) // 关键的一步
tail->next = ptr;
}
}
};
leetcode 92. Reverse Linked List II
最新推荐文章于 2022-10-08 18:10:16 发布