数据结构:关于链表翻转的问题(c++)

问题遇到的现象和发生背景

题目是链表中的节点每k个一组翻转

问题相关代码,请勿粘贴截图

ListNode* reverseKGroup(ListNode* head, int k) {
// write code here
ListNode* a = new ListNode(0);
a->next = head;
ListNode* pre = a;
ListNode* end = a;
while(end->next!=NULL){
for(int i = 0;i<k&&end->next!=NULL;i++){
end = end->next;
}
if(end==NULL){
break;
}
ListNode* start = pre->next;
for(int i = 1;i<k;i++){
ListNode* tmp = start->next;
start->next = start->next->next;
tmp->next = pre->next;
start = tmp;
}
pre = end;
}
return a->next;

}
运行结果及报错内容

段错误
段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起

我的解答思路和尝试过的方法

我的想法是用pre来确定每个小链表(就是需要翻转的链表,长度为k)的位置,end确定小链表的末端,然后翻转用头插法,但是运行出来是错的。看了半天不知道错哪了

我想要达到的结果

start->next = start->next->next;
谁能保证start->next不为空呢?你得有判断啊