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

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

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

int getListSize(struct ListNode *head)
 {
    int cnt=0;
    while(head)
    {
        head=head->next;
        cnt++;
    }
    return cnt;
 }
 struct ListNode* reverseK(struct ListNode *head, int start,int end)
 {
    struct ListNode *p,*q,*tmp,*subhead,*subend,*subheadpre,*subendnext,*temp;
    int offset = start;
    int len = end - start;
    tmp = head;
    p = tmp;
    subheadpre=NULL;
    while(offset)
    {
        subheadpre = tmp;
        tmp = tmp->next;
        p = tmp;
        offset--;
    }
    subhead = p;
    while(len)
    {
        p=p->next;
        len--;
    }
    subend = p;
    subendnext=p->next;
    if(subheadpre)
    {
        subheadpre->next=NULL;
    }

    subend->next = NULL;
    subend = subhead;

    temp = subhead->next;
    q = temp;
    subhead->next = NULL;
    while(temp)
    {
        temp = q->next;
        q->next= subhead;
        subhead = q;
        q = temp;
    }
    if(subheadpre)
    {
        subheadpre->next = subhead;
    }
    else {
    {
        head = subhead;
    }
    }
    subend->next = subendnext;
    return head;
 }
struct ListNode* reverseKGroup(struct ListNode* head, int k ) {
    // write code here
    int len=0;
    int groupcnt=0;
    int i=0;
    if(k==0)
    {
        return head;
    }
    len = getListSize(head);
    groupcnt = len/k;
    if(groupcnt==0)
    {
        return head;
    }
    for(i=0;i<groupcnt;i++)
    {
        head = reverseK(head,i*k,(i+1)*k - 1);
    }
    return head;
    
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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