Reverse Linked List II | Java最短代码实现

原题链接: 92. Reverse Linked List II

【思路】

链表的基本操作,首先申请一个mPre节点,其下一个节点指向head。其次,在第一个while循环中完成:

1.找到m节点mNode(即mPre.next)

2.找到n节点nNode

第二个while循环中完成:

1.从mNode到nNode的反转

当m = 1时,返回nNode,否则返回head:

    public ListNode reverseBetween(ListNode head, int m, int n) {
        ListNode mPre = new ListNode(0);
        mPre.next = head;
        ListNode nNode = head;
        int moveStep = 0;
        while (++moveStep < n) {
            if (moveStep < m)
                mPre = mPre.next;
            nNode = nNode.next;
        }
        ListNode mNode = mPre.next;
        while (mNode != nNode) {
            ListNode mNext = mNode.next;
            mNode.next = nNode.next;
            nNode.next = mNode;
            mNode = mNext;
        }
        mPre.next = nNode;
        return m == 1 ? nNode : head;
    }
欢迎优化!

你可能感兴趣的:(LeetCode,array,list,linked)