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

    繁琐的链表操作,很开心,一次就过了,不过推敲的时间也有20分钟了,

    还是加快思考的速度。

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode *reverseKGroup(ListNode *head, int k) {
    12         // Start typing your C/C++ solution below
    13         // DO NOT write int main() function
    14         if (head == NULL || k <= 1) {
    15             return head;
    16         }       
    17         ListNode *first = getKNode(head, k);
    18         if (first == head) {
    19             return head;
    20         }
    21         ListNode *res = first;
    22         ListNode *start = first->next;
    23         reverse(head, first);
    24         ListNode *pre = head;
    25         while (start) {
    26             first = getKNode(start, k);
    27             if (first == start) {
    28                 pre->next = start;
    29                 return res;
    30             }
    31             pre->next = first;
    32             pre = start;
    33             ListNode *temp = first->next;
    34             reverse(start, first);
    35             start = temp;
    36         }
    37         if (start == NULL) {
    38             pre->next = NULL;
    39             return res;
    40         }
    41         return res;
    42     }
    43     ListNode *getKNode(ListNode *head, int k) {
    44         ListNode *first = head;
    45         int count = 1;
    46         while (first->next && count < k) {
    47             first = first->next;
    48             ++count;
    49         }
    50         if (first->next == NULL && count < k) {
    51             return head;
    52         }
    53         return first;
    54     } 
    55     void reverse(ListNode *start, ListNode *end) {
    56         ListNode *pre = start;
    57         ListNode *iter = start->next;
    58         while (iter != end) {
    59             ListNode *temp = iter->next;
    60             iter->next = pre;
    61             pre = iter;
    62             iter = temp;
    63         }
    64         end->next = pre;
    65     }
    66 };
  • 相关阅读:
    spring培训PPT
    如何创建新模块 DotNetNuke 6 & Entity Framework Code First
    博客园 漂浮快捷操作
    Ext.net中如何上传文件
    Excel与数据库之间的那些事
    关于SQL一对多关系转换的效率思考
    JQuery的结构Dive into jQuery
    《JAVA与模式》之简单工厂模式
    JSM SqlHelper 2.0 新特性(C#)
    mutex互斥锁
  • 原文地址:https://www.cnblogs.com/chasuner/p/reversekgroup.html
Copyright © 2011-2022 走看看