题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
public ListNode reverseBetween (ListNode head, int m, int n) {
if(head==null){
return null;
}
List<ListNode> list=new ArrayList<>();
list.add(head);
while (head.next != null){
list.add(head.next);
head=head.next;
}
List<ListNode> tempList=new ArrayList<>();
for(int i = m-1; i < n;i++){
tempList.add(list.get(i));
}
for(int i = tempList.size()-1;i>0;i--){
tempList.get(i).next=tempList.get(i-1);
if(i-1==0){
tempList.get(i-1).next=null;
}
}
ListNode listNode = tempList.get(tempList.size() - 1);
tempList.clear();
tempList.add(listNode);
while (listNode.next != null){
tempList.add(listNode.next);
listNode=listNode.next;
}
List<ListNode> temp2List=new ArrayList<>();
for(int i=0;i<list.size();i++){
if(i < m-1){
temp2List.add(list.get(i));
}
}
temp2List.addAll(tempList);
for(int i=0;i<list.size();i++){
if(i > n-1){
temp2List.add(list.get(i));
}
}
for(int i =0;i< temp2List.size();i++){
temp2List.get(i).next=temp2List.get(i+1<temp2List.size()?i+1:i);
if(i+1==temp2List.size()){
temp2List.get(i).next=null;
}
}
return temp2List.get(0);
}
安克创新 Anker公司福利 819人发布