题解 | #链表内指定区间反转#

链表内指定区间反转

http://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c


/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    public ListNode reverseBetween (ListNode head, int m, int n) {
        // write code here
        if(m == n || head == null ||m > n){
            return head;
        }
        
        ListNode temp = new ListNode(-1);
        
        ListNode currentNode = head;
        //0<m≤n≤size
        int count = 0;
        //区间  before  ..... first .... last ... after
        //first  last 间需要倒转
        ListNode first = null ,last= null;
        ListNode before = null,after = null;
        while(currentNode != null){
            count ++;
            ListNode next = currentNode.next;
            if(count == m - 1){
                before = currentNode;
            }
            if(count == n + 1){
                after = currentNode;
            }
            if(count >= m && count <= n){
                ListNode pre = temp.next;
                
                if(pre == null){
                    //最开始第 m 个位置节点
                    first = currentNode;
                }
                
                
                temp.next = currentNode;
                currentNode.next = pre;
            }
            currentNode =  next;
        }
        if(first != null  && before != null){
            last = temp.next;
            before.next = last;
            first.next = after;
             return head;
        }
        //从第一个数开始
        if(before == null){
           last = temp.next;
            first.next = after;
            return last;
        }
        return head;
    }
}
全部评论

相关推荐

02-01 19:48
门头沟学院 Java
神哥了不得:(非引流)直接暑期吧,没时间日常了,老鱼简历把水印去了,或者换个模板,简历字体大小都不太行,建议换2个高质量的项目,面试应该还会再多一些
点赞 评论 收藏
分享
EEbond:给北邮✌️跪了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务