赞
踩
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
反转m到n之间 注意 第m个节点会是反转部分的最后一个 即是尾巴 所以要记录下来 而第m-1个节点将会是这一部分的前一个节点 即为头 也要记录下来 然后对内部反转 最后将头和尾做处理
- public ListNode reverseBetween(ListNode head, int m, int n) {
- // 判断是否为空
- if (head == null) {
- return null;
- }
-
- //移动两个指针直到它们达到开始边界
- ListNode cur = head, prev = null;
- while (m > 1) {
- prev = cur;
- cur = cur.next;
- m--;
- n--;
- } //退出循环时 cur恰好达到第m个点
-
- // 记录头和尾
- ListNode con = prev;
- ListNode tail = cur;
-
- // Iteratively reverse the nodes until n becomes 0.
- ListNode inNext = null;
- while (n > 0) {
- inNext = cur.next;
- cur.next = prev;
- prev = cur;
- cur = inNext;
- n--;
- }
- //退出循环时 pre来到第n个点 cur来到第n+1个点
- if (con != null) {
- con.next = prev; //连接头
- } else {
- head = prev;
- }
-
- // cur已经来到第n+1个点
- tail.next = cur; //连接尾
- return head;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。