/**
* Definition for singly-linked list.
* 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 {
private:
void reverse(ListNode * head) //反转链表
{
ListNode * pre=nullptr;
ListNode * cur=head;
while(cur) //从第一个节点到最后一个节点遍历
{
ListNode * ne=cur->next;
cur->next=pre;
pre=cur;
cur=ne;
}
}
public:
ListNode* reverseBetween(ListNode* head, int left, int right) { //思路:将left到right先反向,然后pre_beg指向链表头节点,链表尾节点指向curr
ListNode * pre_beg=new ListNode(-1,head); //虚拟头节点,很关键
ListNode * pre=pre_beg;
for(int i=0;i<left-1;i++)
{
pre=pre->next;
}
ListNode * leftnode=pre->next;
ListNode * rightnode=leftnode;
for(int i=0;i<right-left;i++)
{
rightnode=rightnode->next;
}
ListNode * curr=rightnode->next;
rightnode->next=nullptr; //注意此处要截断
reverse(leftnode);
pre->next=rightnode;
leftnode->next=curr;
return pre_beg->next;
}
};
LeetCode 92 反转链表II 链表
最新推荐文章于 2023-01-23 13:33:15 发布