给定一个单链表,要求输出从第n到第m个位置翻转后的链表。
思路:
使用头插法:
例如,已知链表如图:
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;
}