题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
注意递归调用,以及中途计算node的个数是否满足k,如果不满足,返回head即可,还有注意head->next其实已经是反转后的最后一个节点了,所以head->next 就直接接受上一个迭代返回的前驱节点即可。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
ListNode* reverseKGroup(ListNode* head, int k) {
// write code here
if(!head || k<=1){
return head;
}
ListNode* pre_node = NULL;
ListNode* cur_node = head;
ListNode* next_node = NULL;
for(int i = 0;i<k;i++){
if(!cur_node) return head;
cur_node = cur_node->next;
}
cur_node = head;
for(int i = 0; i< k; i++){
next_node = cur_node->next;
cur_node->next = pre_node;
pre_node = cur_node;
cur_node = next_node;
}
head->next = reverseKGroup(next_node,k);
return pre_node;
}
};算法解析 文章被收录于专栏
这里主要是算法岗的自我思路总结