LeetCode—92. Reverse Linked List II

Reverse a linked list from position m to n. Do it in one-pass.

Note: 1 ≤ m ≤ n ≤ length of list.

Example:

Input:1->2->3->4->5->NULL,m= 2,n= 4Output:1->4->3->2->5->NULL


本题要求在一个链表中,颠倒第m个-第n个节点,形成新的链表(从第一个节点算起,不是第0个)。

首先建立dummy节点指向头结点,接着找前置节点,即第m-1个节点。算法的思想是依次将第m+1、第m+2、...、第n个节点放到pre节点后。设cur节点为第m个节点。则在每次变换位置的循环中,首先找到cur节点的下一个节点t,cur的next指向t的next,t的next指向pre的next,pre的next指向t。



ListNode *reverseBetween(ListNode *head, int m, int n) {

        ListNode *dummy = new ListNode(-1), *pre = dummy;

        dummy->next = head;

        for (int i = 0; i < m - 1; ++i) pre = pre->next;

        ListNode *cur = pre->next;

        for (int i = m; i < n; ++i) {

            ListNode *t = cur->next;

            cur->next = t->next;

            t->next = pre->next;

            pre->next = t;

        }

        return dummy->next;

    }

你可能感兴趣的:(LeetCode—92. Reverse Linked List II)