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

链表内指定区间反转

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

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

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(head != null && head.next != null && m != n) {
            ListNode cur = head;
            int tm = m, tn = n - m;
            //找到需要翻转区间的起始端点(s,e),和端点区间左右相邻点(left,right)
            ListNode left = null;
            while(tm-->1) {
                left = cur;
                cur = cur.next;
            }
            ListNode s = cur;
            while(tn-->0) {
                cur = cur.next;
            }
            ListNode e = cur;
            ListNode right = cur.next;
            //链表翻转
            e.next = null;
            ListNode pre = null;
            cur = s;
            while(cur != null) {
                ListNode tmp = cur.next;
                cur.next = pre;
                pre = cur;
                cur = tmp;
            }
            //补齐: left->(e,s)->right
            if(left != null) {
                left.next = e;
            }
            s.next = right;
            //注意输出表头
            return left == null ? e : head;
        }
        return head;
    }
}

全部评论

相关推荐

996的工作制还是没能硬啃下去,快要面试怂了,取消了
牛客80700350...:很正常,不是所有人都能接受这种强度的。不叫怯战,这叫明智
点赞 评论 收藏
分享
03-31 14:46
已编辑
门头沟学院 Web前端
励志成为双港第一ja...:这其实很正常,离的太远了,他认为你不会来,就为了混个面试,而且成本很高,实习生都优先选本地高校。吃了地域的亏,所有很多时候地域可能比院校层次更重要。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务