反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
1 /** 2 * 列表定义 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */
解答:
class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { // Empty list if (head == null) { return null; } ListNode cur = head, prev = null; while (m > 1) { prev = cur; cur = cur.next; m--; n--; } ListNode con = prev, tail = cur; ListNode third = null; while (n > 0) { third = cur.next; cur.next = prev; prev = cur; cur = third; n--; } if (con != null) { con.next = prev; } else { head = prev; } tail.next = cur; return head; } }
原文:https://www.cnblogs.com/dkccc/p/11438370.html