zoukankan      html  css  js  c++  java
  • Reverse Nodes in k-Group (链表)

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

    If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

    You may not alter the values in the nodes, only nodes itself may be changed.

    Only constant memory is allowed.

    For example,
    Given this linked list: 1->2->3->4->5

    For k = 2, you should return: 2->1->4->3->5

    For k = 3, you should return: 3->2->1->4->5

    思路:其实就是反转多个链表,然后把这多个链表连接起来即可.

    code:

    class Solution {
    public:
        ListNode *reverseKGroup(ListNode *head, int k) {
            if(head==NULL||k<0) return NULL;
            if(k==0||head->next==NULL) return head;
            bool first=true;
    
            vector<ListNode*> lastOfGroup;int loc=0;
            ListNode* prep=NULL;
            ListNode* p=NULL;
            ListNode* move=head;
            ListNode* nextHead=NULL;
            ListNode* resHead=NULL;
            bool firsttag=true;
            
            while(move!=NULL){
                int i=1;
                nextHead=move;
                while(i<=k&&move!=NULL){
                    move=move->next;
                    ++i;
                }
                prep=nextHead;
                p=nextHead->next;
                lastOfGroup.push_back(prep);
                if(i-1==k){
                    prep->next=NULL;
                    int j=1;
                    while(j<=k-1){
                        ListNode* tempNextNode=p->next;
                        p->next=prep;
                        prep=p;
                        p=tempNextNode;
                        ++j;
                    }
                    if(firsttag) 
                        resHead=prep;
                    if(!firsttag) 
                        lastOfGroup[loc++]->next=prep;
                    firsttag=false;
                }else{
                    if(firsttag) return head;
                    lastOfGroup[loc++]->next=nextHead;
                }
            }
            return resHead;
        }
    };
  • 相关阅读:
    C++疑难杂症
    程序中的错误、异常处理框架设计
    客户端ARPG角色行为模型
    http协议
    MySQL数据库开发(2)
    MySQL数据库开发(1)
    网络编程进阶及并发编程
    网络编程-SOCKET开发
    面向对象编程
    常用模块
  • 原文地址:https://www.cnblogs.com/fightformylife/p/4218778.html
Copyright © 2011-2022 走看看