[LeetCode]Reverse Linked List II
2013-05-31 02:39
417 查看
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { //divide this problem into 3 parts //1. previous part, do not need to reverse //2. median part, need to reverse //3. post part, do not need to reverse //note: //1. link the previous part to median part & link median part to post part //2. get the new head public: ListNode *reverseBetween(ListNode *head, int m, int n) { // Start typing your C/C++ solution below // DO NOT write int main() function ListNode* pre = NULL; ListNode* median = NULL; ListNode* post = NULL; ListNode* p = head; //1. previous part for (int i = 1; i < m && p; ++i) { if(!pre) pre = p; else { pre->next = p; pre = pre->next; } p = p->next; } //2. median part ListNode* firstMedian = NULL; for (int i = m; i <= n && p; ++i) { if(!median) { median = p; p = p->next; median->next = NULL; firstMedian = median; } else { ListNode* tmp = p->next; p->next = median; median = p; p = tmp; } } if(pre) pre->next = median; if(firstMedian) firstMedian->next = p; //find the head if(!pre) head = median; return head; } };
second time
/** * 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) { // Start typing your C/C++ solution below // DO NOT write int main() function ListNode dummy(-1); dummy.next = head; ListNode* prev = &dummy;//node before reverse range ListNode* cur = head; ListNode* reverseTail; ListNode* reverseHead; int curIdx = 1; while(cur != NULL) { if(curIdx == m) reverseHead = cur, reverseTail = cur; else if(m < curIdx && curIdx <= n) { ListNode* tmp = cur->next; prev->next = cur; cur->next = reverseHead; reverseHead = cur; reverseTail->next = tmp; cur = reverseTail; } else if(curIdx < m) prev = cur; else break;//do not need to reverse anymore cur = cur->next; curIdx++; } return dummy.next; } };
相关文章推荐
- leetcode 之Reverse Linked List II(15)
- leetcode92~Reverse Linked List II
- leetcode[92]:Reverse Linked List II
- LeetCode - 92. Reverse Linked List II
- LeetCode-Reverse Linked List II
- LeetCode92 Reverse Linked List II
- leetcode--Reverse Linked List II
- 【leetcode】Reverse Linked List II
- leetcode(92) Reverse Linked List II
- LeetCode-Reverse Linked List II-翻转链表区间-链表操作
- LeetCode - Reverse Linked List II
- LeetCode题解: Reverse Linked List II
- 【LeetCode】92. Reverse Linked List II 解题报告
- Reverse Linked List II leetcode java
- 【LeetCode】Reverse Linked List II
- LeetCode:Reverse Linked List II
- [LeetCode]206. Reverse Linked List&92. Reverse Linked List II
- [Leetcode]Reverse Linked List II
- [LeetCode]Reverse Linked List II
- leetcode 25. Reverse Nodes in k-Group & leetcode 92. Reverse Linked List II