给定一个单链表,要求输出从第n到第m个位置翻转后的链表。
思路:
使用头插法:
例如,已知链表如图:

Java实现链表部分翻转(从第m个至第n个)_部分翻转

 

public Node reverseFromMtoN2(Node head, int m, int n) {

    if (null == head || m >= n) {
        return head;
    }

    Node pre = new Node(0);
    pre.next = head;


    Node cur = pre;
    for (int i = 1; i < m; i++) {
        cur = cur.next;
    }

    //定义m前节点
    Node mPre = cur;

    //当前节点  m节点
    cur = cur.next;

    //下一个节点
    Node mNext = null;

    //翻转m到n之间的节点
    for (int i = m; i < n; i++) {

        mNext = cur.next;
        cur.next = mNext.next;
        mNext.next = mPre.next;
        mPre.next = mNext;
    }

    return pre.next;
}