K 个一组翻转链表
/**
* 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) {
//使用什么方法呢进行相应的计算呢?使用pre进行相应的标记一下
ListNode* pre = new ListNode(1);
ListNode* newhead = pre;
ListNode* cur = head;//动态的节点
ListNode* left = head;//左边界的点
ListNode* node = pre->next;//
ListNode* nextnode = NULL;//下一个遍历的节点首元素
ListNode* tail = pre;//有边界的节点标志
pre->next = cur;//定义一下下一个节点
while (1)
{
int K = k;
left = pre->next;//获取当前的左边界
//遍历一下k是否满足
cur = left;//当前节点等于left
while (--K&&cur != NULL)
{
cur = cur->next;
//--K;
}
if (cur == NULL)
break;
tail = cur;
//进行变量的赋值
nextnode = tail->next;//下一个遍历的范围
//ListNode* nextNode=nextnode;
ListNode* null_node = NULL;
cur = left;
while (cur != nextnode)
{
ListNode* Next = cur->next;
cur->next = null_node;//表示的是当前节点的前驱
null_node = cur;
cur = Next;
}
pre->next = tail;
left->next = nextnode;
pre = left;
}
return newhead->next;
}
};