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

链表内指定区间反转

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

/**
     * 首先生成一个首节点
     * t1指针保存m前一个节点
     * t2指针保存n的后一个节点
     * tail指针保存反转后的尾节点
     * pre指针保存反转后的首节点
     * t1.next = pre;
     * tail.next = t2;
     *
     * @param head
     * @param m
     * @param n
     * @return
     */
    public static ListNode reverseBetween(ListNode head, int m, int n) {
        // write code here
        if (m == n) {
            return head;
        }
        int i = 0;
        int j = 0;
        ListNode node = new ListNode(0);
        node.next = head;
        ListNode cur = node;
        ListNode next;
        ListNode pre = null;
        ListNode t1 = node;
        ListNode t2 = null;
        ListNode tail = null;
        while (cur != null) {
            next = cur.next;
            if (i >= m && j <= n) {
                cur.next = pre;
                pre = cur;
                cur = next;
            } else if (i + 1 == m) {
                t1 = cur;
            } else if (j > n) {
                t2 = cur;
                break;
            }
            if (i < m) {
                i++;
                cur = next;
                tail = cur;
            }
            j++;
        }
        t1.next = pre;
        tail.next = t2;
        return node.next;
    }
算法 文章被收录于专栏

数据结构和算法

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务