92. Reverse Linked List II【遍历一遍就反转链表】

来源:互联网 发布:比特币实时行情数据 编辑:程序博客网 时间:2024/06/18 01:11

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

For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given m, n satisfy the following condition:
1 ? m ? n ? length of list.

思路:
这里写图片描述

代码:

/** * 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) {        if (m==n) return head;        ListNode* left = NULL;        ListNode* curr = head;        for(int i = 1; i < m; ++i) {            left = curr;            curr = curr->next;        }        // reverse        ListNode* end  = curr;        ListNode* prev = curr;        curr = curr->next;        for(int i = m; i < n; ++i) {            ListNode* next = curr->next;            curr->next = prev;            prev = curr;            curr = next;        }        // link to the right-part        end->next = curr;        if (left) { left->next = prev; return head;}        return prev;    }};
阅读全文
0 0