题解 | 链表中的节点每k个一组翻转

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

https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
struct ListNode* reverseKGroup(struct ListNode* head, int k ) {
   if(head==NULL||k==1){
    return head;
   }
//虚拟头节点
struct ListNode Head;
Head.next=head;
   //设置窗口指针
   struct ListNode* cur=head;
   struct ListNode* tail;
   //设置记录头的指针
   struct ListNode* p=&Head;
  //记录窗口开始地址的指针
  struct ListNode* ph=NULL;
   //滑动
   while(cur!=NULL){
    tail=cur;
    ph=cur;
    for(int i=1;i<k&&tail;i++){
         tail=tail->next;
}
if(!tail)
{break;}

//记录下一个组头
struct ListNode* newGroup=tail->next;
//断开组
tail->next=NULL;
//反转
struct ListNode*pre=NULL;
struct ListNode* Next=NULL;
while(cur){
Next=cur->next;
cur->next=pre;
pre=cur;
cur=Next;
}
p->next=pre;
p=ph;
cur=newGroup;
   }
   p->next=cur;
 return  Head.next;
   
   
    // write code here
}

全部评论

相关推荐

牛客44320985...:你的当务之急是把这个糖的要死的沟槽ide主题改了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务