反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
ListNode* reverseKGroup(ListNode* head, int k) {
//hair结点是heard头结点之前的结点
ListNode* hair = new ListNode(0);
hair->next = head;
//pre为子链heard的前一个
ListNode* pre = hair;
//遍历结点
while (head) {
// 每次遍历,tail从pre开始向后走k步。如果不满k个,即tail为空,则返回成功。
ListNode* tail = pre;
// 查看剩余部分长度是否大于等于k
for (int i = 0; i < k; ++i) {
tail = tail->next;
if (!tail) {
return hair->next;
}
}
ListNode* nex = tail->next;//nex保存子链的下一个
tie(head, tail) = myReverse(head, tail);//翻转head到tail的链表
// 把子链表重新接回原链表
pre->next = head;
tail->next = nex;
// 移动pre指向下一个子链头的前一个
pre = tail;
// 移动heard指向下一个子链头
head = tail->next;
}
return hair->next;
}