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

链表内指定区间反转

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

思路:就是常规的反转链表操作。为什么要添加 dummy 节点的,模拟一下链表只有两个节点,反转的范围为:1,2 的情况。

时间:O(n);

空间:O(1);

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) {
        if (m == n) return head;
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode preNode = dummy;  // 记录第 m-1 个节点
        ListNode left;  // 记录第 m 个节点
        ListNode pre = dummy;
        ListNode cur = pre.next;
        int k = n - m;
        // 找到第 m 个节点以及di m-1 个节点,pre 为第 m 个节点,
        while (m > 0) {
            if (m == 1) preNode = pre;
            pre = pre.next;
            cur = cur.next;
            m--;
        }
        left = pre;
        // 开始反转
        while(k>0 && cur != null){
            ListNode temp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = temp;
            k--;
        }
        // 特殊处理
        preNode.next = pre;
        left.next = cur;
        return dummy.next;
    }
}
全部评论

相关推荐

牛客737698141号:他们可以看到在线简历的。。。估计不合适直接就拒了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务