92. Reverse Linked List II 等题
2016-11-20 22:30
183 查看
206. Reverse Linked List
原题:Reverse a singly linked list.
题解:
用递归很容易解决这个问题,几个问题,要先获取最后一个元素(未来的首元素),复杂度为O(n)。递归一遍,复杂度为O(2n)。总复杂度为O(n)。
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { if(!head) { return head; } ListNode* h=head; while(h->next) { h = h->next; } helper(head); return h; } ListNode* helper(ListNode* node) { if(node->next == NULL) { return node; } auto n = helper(node->next); node->next = NULL; n->next = node; return node; } };
92. Reverse Linked List II
原题: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 = 2and
n = 4,
return
1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
题解:
一个范围,两个要注意的点,变换范围的前面和后面元素。一开始用朴素的方法来实现,出现了很多奇怪的特殊情况,比如头元素为1之类的。于是去找了一下别人的实现方法,看到一个很巧妙的交换方法,目前也不是非常理解,先贴出来给共同学习。
代码:
/** * 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 dummy(0), *prev = &dummy; dummy.next = head; for (int i=1; i<m; i++) prev = prev->next; ListNode *pivot = prev->next; for (int i=m; i<n; i++) { swap(prev->next, pivot->next->next); swap(prev->next, pivot->next); } return dummy.next; } };
相关文章推荐
- 92. Reverse Linked List II
- 206. Reverse Linked List && 92. Reverse Linked List II
- [Leetcode]92. Reverse Linked List II
- 92. Reverse Linked List II
- LeetCode||92. Reverse Linked List II
- 92. Reverse Linked List II
- Leetcode 92. Reverse Linked List II
- Leetcode 92. Reverse Linked List II
- 92. Reverse Linked List II
- leetcode 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- leetCode 92.Reverse Linked List II (反转链表II) 解题思路和方法
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- 92. Reverse Linked List II
- LeetCode 92. Reverse Linked List II
- LeetCode 92. Reverse Linked List II
- 92. Reverse Linked List II