反转单链表2

反转单链表2

问题

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

1 <= m <= n <= 链表长度。
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

代码

    public ListNode reverseBetween(ListNode head, int m, int n) {
        if (head == null || head.next == null || m == n)
            return head;
        ListNode normal = head, last = null, pre, cur, dummy = new ListNode(0);
        dummy.next = head;
        pre = dummy;
        cur = head;
        while (cur != null) {
            if (m == 1) {
                normal = cur;
                // 链表反转,头拼接
                last = reverseList(cur, pre, n);
                // 尾拼接
                normal.next = last;
                break;
            }
            cur = cur.next;
            pre = pre.next;
            m--;
            n--;
        }
        return dummy.next;
    }

    // 反转链表工具方法,反转当前节点与之后n个节点的子链表,头拼接
    public ListNode reverseList(ListNode head, ListNode first, int n) {
        ListNode pre = null;
        ListNode next = head;
        while (n > 0) {
            ListNode tmp = next.next;
            next.next = pre;
            pre = next;
            next = tmp;
            n--;
        }
        first.next = pre;
        return next;
    }

  转载请注明: ForwardXu 反转单链表2

 上一篇
删除链表节点 删除链表节点
删除链表节点问题 这个题目说的是,你要写一个函数来删除单链表中的一个节点,并且只给你指向那个节点的指针。其中,这个单链表至少有两个节点,并且不会要求你删除尾节点。 比如说,给你的单链表是: 0 -> 1 -> 2 ->
2019-02-20
下一篇 
求和为给定值的组合 求和为给定值的组合
求和为给定值的组合题目描述这个题目说的是,给你一个正整数数组,数组中不包含重复元素,同时给你一个正整数目标值,你要找到数组中和为目标值的所有组合。另外,数组中每个元素都可以使用无限多次,并且答案中不能包含重复组合。 比如说,给你的数组是:
2019-02-17
  目录