#include<bits/stdc++.h>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(){}
ListNode(int x):val(x),next(NULL){} //链表节点包含两个东西,一个val通过x接收值,以及一个
//next指针指空,用于创新链表
};
ListNode* reverseBetween(ListNode* head,int m,int n){
ListNode *preL=NULL,*L=NULL,*sufR=NULL,*H=new ListNode, *q;
int c=1,flag=0;
if(m==1)flag=1;
for(ListNode *p=head;p;c++){
if(c==m-1)preL=p;
else if(c==m){L=p;flag=1;}
else if(c==n+1){sufR=p;flag=0;}
if(flag){
q=p->next;
p->next=H->next;
H->next=p;
p=q;
}else p=p->next;
}
L->next=sufR;
if(preL){
preL->next=H->next;
return head;
}else{
return H->next;
}
}
void print(ListNode *x){
printf("%d ",x->val);
if(x->next)print(x->next);
}
int main(){
int n,L,R,v;
scanf("%d %d %d",&n,&L,&R);
ListNode *head=new ListNode,*p=head;
for(int i=1;i<=n;i++){
scanf("%d",&v);
p->next=new ListNode(v);
p=p->next;
}
print(reverseBetween(head->next,L,R));
}
1271:反转链表
于 2024-04-18 20:34:18 首次发布