反转链表 II

反转从位置 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个节点之前。

如示例中

将节点3插入1 、2中,1->3->2->4->5->NULL

将节点4插入1 、3中,1->4->3->2->5->NULL

定义两个指针p,q分别指向节点1与节点2,将q后面的节点插入p后面。

 

代码如下:

    public static ListNode test(ListNode head, int m, int n) {

        if (m == n) return head;

        ListNode h = new ListNode(0);
        h.next = head;
        ListNode p = h;
        for (int i=1; i<m; i++) p = p.next;
        ListNode q = p.next;

        ListNode temp;
        for (int i=m; i<n; i++) {
            temp = q.next;
            q.next = temp.next;
            temp.next = p.next;
            p.next = temp;
        }
        return h.next;
    }

 

posted on 2018-05-24 19:38  Deltadeblog  阅读(162)  评论(0编辑  收藏

导航