leetcode 92. Reverse Linked List II

来源:互联网 发布:安徽之达大数据研究院 编辑:程序博客网 时间:2024/06/05 08:02
/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {    //部分逆置,一定要掌握public:    ListNode* reverseBetween(ListNode* head, int m, int n) {        ListNode* help = new ListNode(0); //添加一个头结点        help->next = head;        ListNode* prior = help;        int i = 1;        for (; i < m && prior; ++i)            prior= prior->next;        reverse(prior, n - i + 1);         return help->next;    }private:    void reverse(ListNode* prior, int num){        ListNode* tail = prior->next;//第一个结点会变成最后一个结点        ListNode* ptr = prior->next;        for (int i = 0; i < num && ptr; ++i){            ListNode* tmp = ptr->next;            ptr->next = prior->next;            prior->next= ptr;            ptr = tmp;            if ( i == num - 1)  // 关键的一步                tail->next = ptr;        }    }};

0 0
原创粉丝点击