zoukankan      html  css  js  c++  java
  • 【Leetcode】K 个一组翻转链表

    题目链接:K 个一组翻转链表


    题意:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。

    如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

    给你这个链表:1->2->3->4->5

    当 k = 2 时,应当返回: 2->1->4->3->5

    当 k = 3 时,应当返回: 3->2->1->4->5

    题解:先统计一下链表的长度,k个一组,分成n/k组,然后每组翻转k-1次。

    翻转的过程如图所示。画图真的对做链表题很管用啊。QAQ

    也是做完这个操作以后,再更新一下cur和pre即可。 


    代码:

     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         ListNode* ans = new ListNode(0);
    13         ListNode* pre = ans;
    14         ListNode* cur = head;
    15         ListNode* tail =ans;
    16         
    17         ans->next = head;
    18         //统计链表长度
    19         int len = 0;
    20         while(head){
    21             head = head->next;
    22             len++;
    23         }
    24         
    25         //k个一组
    26         for(int i = 0 ; i < len/k ; i++){
    27             for(int j = 1; j <= k-1 ;j++){  //翻转k-1次
    28                tail = cur->next;
    29                
    30                cur->next = tail->next;
    31                tail->next = pre->next;
    32                pre->next = tail;
    33             }
    34             pre = cur;
    35             cur = pre->next;
    36         }
    37 
    38         return ans->next;
    39     }
    40 };
  • 相关阅读:
    Flutter—代码提示不区分大小写
    Flutter—语法解析
    在Android Studio中创建flutter工程
    iOS热重载
    在终端中创建flutter程序
    Flutter的安装以及一些坑
    iTerms的配置和安装
    QT QFileSystemWatcher 文件监控 [转载]
    QT SQL 操作SQLite数据库
    QT使用QtCharts绘制图形
  • 原文地址:https://www.cnblogs.com/Asumi/p/12514368.html
Copyright © 2011-2022 走看看