LeetCode: Reverse Nodes in k-Group
2013-04-20 13:06
471 查看
从这题和上一题可以总结出反转链表的经验,需要有5个指针:end, q, p, pPre, pNext. p和pPre进行方向转置后p和pPre向后移,pNext用来记录转置前p的后一个,q用来记录转置串之前的node,end记录转置串最开始的node。
recursive的方法更好理解
C#
View Code
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *reverseKGroup(ListNode *head, int k) { // Start typing your C/C++ solution below // DO NOT write int main() function ListNode *pPre, *end, *p, *q; p = head; q = NULL; bool flag = true; while (flag) { end = pPre = p; ListNode *tmp = pPre; for (int i = 0; i < k; i++) { if (tmp) tmp = tmp->next; else { flag = false; break; } } if (!flag) break; p = p->next; for (int i = 0; i < k-1; i++) { ListNode *pNext = p->next; p->next = pPre; pPre = p; p = pNext; } end->next = p; if (!q) head = pPre; else q->next = pPre; q = end; } return head; } };
recursive的方法更好理解
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *reverseKGroup(ListNode *head, int k) { if (!head) return NULL; ListNode *p = head; int len = 0; for (; p && len < k; p = p->next) len++; if (len < k) return head; ListNode *pre = NULL; p = head; for (int i = 0; i < k; ++i) { ListNode *pnext = p->next; p->next = pre; pre = p; p = pnext; } head->next = reverseKGroup(p, k); return pre; } };
C#
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int x) { val = x; } * } */ public class Solution { public ListNode ReverseKGroup(ListNode head, int k) { if (head == null) return null; ListNode p = head; int len = 0; for (; p != null && len < k; p = p.next) len++; if (len < k) return head; ListNode pre = null; p = head; for (int i = 0; i < k; i++) { ListNode pNext = p.next; p.next = pre; pre = p; p = pNext; } head.next = ReverseKGroup(p, k); return pre; } }
View Code
相关文章推荐
- LeetCode第25题之Reverse Nodes in k-Group
- Java [leetcode 25]Reverse Nodes in k-Group
- leetcode Reverse Nodes in k-Group
- [leetcode]Reverse Nodes in k-Group
- 【leetcode刷题笔记】Reverse Nodes in k-Group
- Leetcode: Reverse Nodes in k-Group
- [LeetCode] Reverse Nodes in k-Group
- leetcode:Reverse Nodes in k-Group
- *(重点)[LeetCode]Reverse Nodes in k-Group
- Reverse Nodes in k-Group -- leetcode
- [LeetCode] Reverse Nodes in k-Group
- LeetCode-Reverse Nodes in k-Group
- LeetCode 25: Reverse Nodes in k-Group
- [LeetCode]—Reverse Nodes in k-Group 将链表以n个节点为一组进行逆序
- Reverse Nodes in k-Group--LeetCode
- [LeetCode]Reverse Nodes in k-Group
- 【leetcode】Reverse Nodes in k-Group
- DAY27:leetcode #25 Reverse Nodes in k-Group
- leetcode第24题--Reverse Nodes in k-Group
- [leetcode]Reverse Nodes in k-Group