一、题目内容
二、题解
解法1:
思路
注意换头情况
先记录left左边的pre,以及right
代码
import java.util.*;public class Solution {public ListNode reverseBetween (ListNode head, int m, int n) {if(m == n){return head;}// write code hereListNode dummy = new ListNode(-1);dummy.next = head;int len = 0;ListNode cur = head;ListNode pre = null,right = null;while(cur!=null){len+=1;if(len == m-1){pre = cur;}if(len == n){right = cur;}cur = cur.next;}if(m > n || m < 1 || n > len){return head;}//换头if(pre == null){pre = dummy;}ListNode left = pre.next;pre.next = null;ListNode next = right.next;right.next = null;ListNode newLeft = reverse(left);left.next = next;pre.next = newLeft;return dummy.next;}private ListNode reverse(ListNode root){ListNode pre = null,cur = root;while(cur!=null){ListNode next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;}}
