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

链表内指定区间反转

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
        ListNode nodeBeforeM = null;
        ListNode nodeM = null;
        ListNode nodeN = null;
        ListNode nodeAfterN = null;
        ListNode cursor = head;
        ListNode pre = null;

        if (m == n) {
            return head;
        }

        if (m > n) {//illegal
            return null;
        }

        int i = 1;
        while (cursor != null) {
            if (i == (m - 1)) { //when m>1, nodeBeforeM not null, otherwise nodeBeforeM=null
                nodeBeforeM = cursor;
            }

            if (i >= m && i <= n) {
                ListNode newNode = new ListNode(cursor.val);
                if (i == m) {
                    nodeM = newNode;
                }
                if (i == n) {
                    nodeN = newNode;

                }
                newNode.next = pre;
                pre = newNode;//will use in next round
            }


            if (i == n && cursor.next == null) {
                if (nodeBeforeM != null) {
                    nodeBeforeM.next = nodeN;
                    break;
                } else {
                    return nodeN;
                }

            }

            if (i > n) {
                nodeM.next = cursor;
                if (nodeBeforeM != null) {
                    nodeBeforeM.next = nodeN;
                    break;
                } else {
                    return nodeN;
                }
            }

            cursor = cursor.next;
            i++;
        }

        return head;
    }
}


主要就是注意边界的情况,要考虑完整。

全部评论

相关推荐

真的很糟糕:欲哭无泪
点赞 评论 收藏
分享
程序员小白条:找的太晚,别人都是大三实习,然后大四秋招春招的,你大四下了才去实习,晚1年
点赞 评论 收藏
分享
代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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