• 25. Reverse Nodes in k-Group


    一、题目

      1、审题

        

      2、分析

        给一个链表,与一个数字 k,每次翻转链表中的 k 个结点,若剩下的结点个数不满 k 个,则不翻转。

    二、解答

      1、思路:

        a、计算出总结点个数 total, 则需要翻转k个结点的总躺数为 total / k;

        b、循环实现翻转 k 个结点;其中翻转即为将后一个结点依次插入此次翻转的链表头;

        

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode reverseKGroup(ListNode head, int k) {
    
            ListNode dummy = new ListNode(0);
            dummy.next = head;
    
            int total = 0;  // 总结点数
            while(head != null) {
                total++;
                head = head.next;
            }
            head = dummy.next;
    
            ListNode pre = dummy;
            ListNode next;
    
            int times = 1;
            while(times++ <= total / k) {   // 总共翻转 times 次 k 个结点
                int i = 1;      // 翻转 k 个结点, 只要head 前插入后边 k -1 个
                while(i++ < k) {
                    next = head.next;
                    head.next = next.next;  // 删除
    
                    next.next = pre.next;       // 插入
                    pre.next = next;
    
                }
                pre = head;
                head = head.next;
    
            }
    
            return dummy.next;
        }
    }

      

  • 相关阅读:
    Flutter -- iOS导航栏TabBar
    微信小程序布局
    Tomcat for Mac 搭建本地后台服务器 -- 探索Apache Tomcat
    masnory 动态高度
    iPhone 尺度 x xs sr xsmax
    Deepin 安装 tomcat
    Deepin 设置静态 ip
    md 文件 转 pdf
    mac 上关于截图的偏好设置
    MySQL笔记---DDL
  • 原文地址:https://www.cnblogs.com/skillking/p/9424431.html
Copyright © 2020-2023  润新知