LeetCode-Reverse Nodes in k-Group
2013-07-30 21:32
295 查看
/** * 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 if (head == NULL || head->next == NULL || k <= 1) { return head; } ListNode *newHead = head; ListNode *q = head; ////目前要翻转的结点 ListNode *p = NULL; //目前要翻转的结点的下一个结点 ListNode *pNext = NULL; //p的下一个结点 ListNode *pEnd = q; //用于探测剩余结点是够k个 ListNode *pPreEnd = NULL; //目前已翻转的子链表中的最后一个结点 ListNode *pBeg = NULL; //当前要翻转的k的结点的第一个结点,亦为翻转后的最后一个结点 while(true) { //剩余结点是否够k个 for (int i = 0; i < k - 1; ++i) { if (pEnd != NULL) { pEnd = pEnd->next; } else { break; } } if (pEnd == NULL) { break; } //初始化p, pBeg p = q->next; pBeg = q; //依次翻转k个相邻结点,注意保存p的下一个结点 for (int i = 0; i < k - 1; ++i) { pNext = p->next; p->next = q; q = p; p = pNext; } //更新pPreEnd, q, pEnd if (pPreEnd != NULL) { pPreEnd->next = q; } else { newHead = q; } pPreEnd = pBeg; q = p; pEnd = q; pPreEnd->next = q; } return newHead; } };
相关文章推荐
- leetcode 日经贴,Cpp code -Reverse Nodes in k-Group
- LeetCode--Reverse Nodes in k-Group
- [leetcode]Reverse Nodes in k-Group
- LeetCode 之 Reverse Nodes in k-Group — C 实现
- Leetcode: Reverse Nodes in k-Group
- LeetCode: Reverse Nodes in k-Group [024]
- [LeetCode]Reverse Nodes in k-Group
- 【leetcode】Reverse Nodes in k-Group
- leetcode第24题--Reverse Nodes in k-Group
- [leetcode]Reverse Nodes in k-Group
- LeetCode Reverse Nodes in k-Group
- C实现 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 25 - Reverse Nodes in k-Group
- Reverse Nodes in k-Group--LeetCode
- [leetcode] Reverse Nodes in k-Group