[leetcode]Reverse Linked List II

有一道链表的题目。今天面试别人出了链表的题目都被答出来了,可见这个一般训练过还是能做出来的,就是考虑corner case即可。这里主要是m为1的时候,head就要变了。

class Solution {

public:

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

        ListNode* current = head;

        ListNode* last = NULL;

        int i = 1;

        while (i != m && current != NULL)

        {

            last = current;

            current = current->next;

            i++;

        }

        ListNode* start1 = last;

        ListNode* start2 = current;

        last = current;

        current = current->next;

        i++;

        while (i != n+1 && current != NULL)

        {

            ListNode* tmp = current->next;

            current->next = last;

            last = current;

            current = tmp;

            i++;

        }

        if (start1 != NULL)

        {

            start1->next = last;

        }

        else

        {

            head = last;

        }

        if (start2 != NULL)

        {

            start2->next = current;

        }

        return head;

    }

};

  

你可能感兴趣的:(LeetCode)