反转链表 II

Posted Delta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反转链表 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;
    }

 

以上是关于反转链表 II的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode92. 反转链表 II

Leetcode92. 反转链表 II

Leetcode92. 反转链表 II(JAVA头插法)

反转链表 II 区间反转

头插法LeetCode 92. 反转链表 II

Leetcode 92206:反转链表-反转链表 II