[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;
    }
};

  

原文地址:https://www.cnblogs.com/lautsie/p/3315845.html