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

链表内指定区间反转

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) {
        int i=1;
        ListNode currNode = head;
        ListNode pre = head;
        ListNode mn_head = null;
        while(currNode!=null){
            if(i>=m && i<=n){
                ListNode afterMNode = currNode; //第n+1个节点
                for (int j=0;j<n-m+1;j++){
                    afterMNode = afterMNode.next;
                }
                mn_head = reverseMN(currNode,n - m + 1);
                if(i==1){
                    head = mn_head;
                }else pre.next = mn_head;
                currNode.next = afterMNode;
                break;
            }else {
                pre = currNode;
                currNode = currNode.next;
                i++;
            }
        }
        return head;
    }

    public ListNode reverseMN(ListNode currNode,int n){
        if (n==1){
            return currNode;
        }
        ListNode new_head = reverseMN(currNode.next,--n);
        currNode.next.next = currNode;
        currNode.next = null;
        return new_head;
    }

}

分三段处理   0~m-1   m~n   n+1~最后

全部评论

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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