leetcode Reverse Linked List II

来源:互联网 发布:我知天下事手抄报 编辑:程序博客网 时间:2024/05/01 08:06

上题:

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->NULLm = 2 and n = 4,

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

Note:
Given mn 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){int k = 1;ListNode* dummy = new ListNode(-1);dummy->next = head;ListNode* prev = dummy;ListNode* end = NULL;while (head){if (k >= m && k <= n){if (k == m){k++;end = head;head = head->next;continue;}else{ListNode* next = head->next;head->next = prev->next;prev->next = head;end->next = next;head = next;k++;}}else{k++;prev = head;head = head->next;}}ListNode* pRet = dummy->next;delete dummy;return pRet;}};


0 0
原创粉丝点击