leetcode-92. 反转链表 II
题目:
:
代码:
#include <iostream>
using namespace std;
struct ListNode{
int val;
ListNode *next;
};
void reverseLinkedList(ListNode *head){
ListNode *pre=nullptr;
ListNode *cur=head;
while(cur){
ListNode *t=cur->next;
cur->next = pre;
pre=cur;
cur=t;
}
}
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode *dummyNode=new ListNode(-1);
dummyNode->next = head;
ListNode *pre=dummyNode;
for(int i=0;i<left-1;i++){ //找到left的前一个位置
pre=pre->next;
}
ListNode *rightNode=pre;
for(int i=0;i<right-left+1;i++){ //找到right的位置
rightNode=rightNode->next;
}
ListNode *leftNode=pre->next; //反转链表的头
ListNode *curr=rightNode->next; //反转链表的尾的下一个位置
pre->next = nullptr;
rightNode->next = nullptr;
reverseLinkedList(leftNode);
pre->next=rightNode;
leftNode->next=curr;
return dummyNode->next;
}
int main(){
ListNode *res;
ListNode *head;
int left,right;
res=reverseBetween(head, left, right);
}