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

    Well, since the head pointer may also be modified, we create a new_head that points to it to facilitate the reverse process.

    For the example list 1 -> 2 -> 3 -> 4 -> 5 in the problem statement, it will become 0 -> 1 -> 2 -> 3 -> 4 -> 5 (we init new_head -> val to be 0). Then we set a pointer pre to new_head and another cur to head. Then we insert cur -> next after pre for k - 1 times if the current nodecur has at least k nodes after it (including itself). After reversing one k-group, we update pre to be cur and cur to be pre -> next to reverse the next k-group.

    The code is as follows.

     1 class Solution { 
     2 public: 
     3     ListNode* reverseKGroup(ListNode* head, int k) {
     4         if (!hasKNodes(head, k)) return head;
     5         ListNode* new_head = new ListNode(0);
     6         new_head -> next = head;
     7         ListNode* pre = new_head;
     8         ListNode* cur = head;
     9         while (hasKNodes(cur, k)) {
    10             for (int i = 0; i < k - 1; i++) {
    11                 ListNode* temp = pre -> next;
    12                 pre -> next = cur -> next;
    13                 cur -> next = cur -> next -> next;
    14                 pre -> next -> next = temp; 
    15             }
    16             pre = cur;
    17             cur = pre -> next;
    18         }
    19         return new_head -> next;
    20     }
    21 private:
    22     bool hasKNodes(ListNode* node, int k) {
    23         int cnt = 0;
    24         while (node) {
    25             cnt++;
    26             if (cnt >= k) return true;
    27             node = node -> next;
    28         }
    29         return false;
    30     }
    31 };
  • 相关阅读:
    反射/元类/项目的生命周期
    面向对象高级
    面向对象之封装/鸭子类型
    面向对象之继承
    面向对象1
    包/logging模块/hashlib模块/openpyxl模块/深浅拷贝
    python 几行代码实现自动回复功能
    python crypto rsa 加密运用
    pytohn 单下划线与双下划线的区别
    python 线程小练习
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4624378.html
Copyright © 2011-2022 走看看