zoukankan      html  css  js  c++  java
  • [leetcode]Reverse Nodes in k-Group

    又是链表题,最近都不想做了。。。不过今天状态不好,做做吧

    把链表分成大小为k的各种块,然后反转这些块。

    想想还是有点麻烦的感觉。。。。

    要考虑前面,后面的。。。。

    那就递归吧。。。这应该就简单了。。。

    就处理当前k个就好了。。。

    找到这k个。。。reverse。。。

    next指向后面处理好的head(递归

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* reverse(ListNode* head){
            ListNode* prev = nullptr;
            ListNode* nowNode = head;
            while(nowNode){
                ListNode* next = nowNode -> next;
                nowNode -> next =  prev;
                prev = nowNode;
                nowNode = next;
            }
            return prev;
        }
        ListNode *reverseKGroup(ListNode *head, int k) {
            if(head == nullptr || head -> next == nullptr || k < 2) return head;
            
            int cnt = 1;
            ListNode* nowHead = head;
            ListNode* nowNode = head;
            while(nowNode && cnt < k){
                cnt ++;
                nowNode = nowNode -> next;
            }
            if(nowNode && cnt == k){
                ListNode* tail = reverseKGroup(nowNode -> next , k);
                nowNode -> next = nullptr;
                head = reverse(head);
                nowHead -> next = tail;
            }
            return head;
        }
    };
  • 相关阅读:
    checkListbox的单选
    IP地址控件CIPAddressCtrl类的使用
    C++ Socket编程步骤
    环形缓冲区
    隐式链接和显示链接的区别
    memset、memcpy的使用方法!
    cetlm下载地址
    安装 GCC
    centos 配置代理
    make软件包安装
  • 原文地址:https://www.cnblogs.com/x1957/p/3505415.html
Copyright © 2011-2022 走看看