[LeetCode系列]翻转链表问题II
2014-09-04 21:56
453 查看
给定一个链表和两个整数m, n, 翻转链表第m个节点到第n个节点(从1开始计数).
如, 给定链表: 1->2->3->4->5->NULL, 以及 m = 2, n = 4.
返回 1->4->3->2->5->NULL.
假定m和n满足约束条件: 1 ≤ m ≤ n ≤ 链表长度.
注意: 不能使用额外空间, 且只能遍历链表一次.
算法思路:
翻转的过程可以分解成3步:
把相邻的节点的指向关系倒置; 即 1->2<-3<-4 5->NULL
把第m-1个节点(1)指向第n个节点(4); 即 1->4->3->2 5->NULL
把第m个节点(2, 需要缓存)指向第n+1个节点(5). 即 1->4->3->2->5->NULL
如, 给定链表: 1->2->3->4->5->NULL, 以及 m = 2, n = 4.
返回 1->4->3->2->5->NULL.
假定m和n满足约束条件: 1 ≤ m ≤ n ≤ 链表长度.
注意: 不能使用额外空间, 且只能遍历链表一次.
算法思路:
翻转的过程可以分解成3步:
把相邻的节点的指向关系倒置; 即 1->2<-3<-4 5->NULL
把第m-1个节点(1)指向第n个节点(4); 即 1->4->3->2 5->NULL
把第m个节点(2, 需要缓存)指向第n+1个节点(5). 即 1->4->3->2->5->NULL
/** * 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(!head || m == n) return head; ListNode *p = head; int count = 1; while(count < m-1) { p = p->next; count++; } ListNode *p1; if(m == 1) p1= p; else { p1 = p->next; count++; } ListNode *last = p1; ListNode *p2 = p1->next; ListNode *tmp = NULL; while(p2 && count < n) { tmp = p2->next; p2->next = p1; p1 = p2; p2 = tmp; count++; } last->next = tmp; if(m == 1) head = p1; else p->next = p1; return head; } };
相关文章推荐
- [LeetCode系列]链表环探测问题II
- [LeetCode] Reverse Linked List I II - 链表翻转问题
- [LeetCode系列] 跳跃问题II
- “全排列”问题系列(一)[LeetCode] - 用交换元素法生成全排列及其应用,例题: Permutations I 和 II, N-Queens I 和 II,数独问题
- LeetCode 92. Reverse Linked List II(翻转链表)
- [LeetCode] “全排列”问题系列(一) - 用交换元素法生成全排列及其应用,例题: Permutations I 和 II, N-Queens I 和 II,数独问题
- [LeetCode] Invert Binary Tree - 二叉树翻转系列问题
- 翻转链表II-Leetcode92
- LeetCode中 翻转链表II
- Leetcode 92. Reverse Linked List II 翻转链表2 解题报告
- leetcode题目 反转链表系列问题
- LeetCode-Reverse Linked List II-翻转链表区间-链表操作
- LeetCode | Reverse Linked List II(翻转链表2)
- Reverse Linked List II 局部翻转链表@LeetCode
- [leetcode刷题系列]Binary Tree Level Order Traversal II
- [leetcode刷题系列]Populating Next Right Pointers in Each Node II
- [leetcode刷题系列]Best Time to Buy and Sell Stock II
- [leetcode刷题系列]Palindrome Partitioning II
- [leetcode刷题系列]Jump Game II
- LeetCode 笔记系列 14 N-Queen II [思考的深度问题]