题解 | #链表内指定区间反转#
链表内指定区间反转
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); }