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

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

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

 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    ListNode* reverseKGroup(ListNode* head, int k) {
        // write code here
        ListNode *curr=head;
        int total=0;
        if(head==nullptr||k<=1)return head;
        while(curr!=nullptr)
        {
            curr=curr->next;
            total++;
        }
        curr=head;
        if(total<k)return head;
        //进入正文
        stack<ListNode*>st;
        int remains=total%k;
        bool first=true;
        int counter=0;
        ListNode *pHead;
        ListNode *pHead_curr;
        for(int i=1;i<=total;i++)
        {
            if(counter<k)
            {
                ListNode* node=curr->next;
                curr->next=nullptr;
                st.push(curr);
                curr=node;
                counter++;
            }
            if(counter==k)
            {
                if(first)
                {
                    pHead=st.top();
                    pHead_curr=st.top();
                    st.pop();
                    counter--;
                    first=false;
                }
                while(counter>0)
                {
                    pHead_curr->next=st.top();
                    pHead_curr=pHead_curr->next;
                    st.pop();
                    counter--;
                }
            }
        }
        if(counter==0)return pHead;
        stack<ListNode*>st2;
        while(!st.empty())
        {
            st2.push(st.top());
            st.pop();
        }
        while(!st2.empty())
        {
            pHead_curr->next=st2.top();
            st2.pop();
            pHead_curr=pHead_curr->next;
        }
        return pHead;


    }
};
全部评论

相关推荐

斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
拒绝无效加班的傻狍子很乐观:上交✌也挂我也在等结果
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务