zoukankan      html  css  js  c++  java
  • 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;
        }
    }

      

  • 相关阅读:
    linux系统的nobody用户
    java包命名规则
    配置文件解析
    jps参数
    Java数据类型总结
    JSON与JAVA数据的相互转换
    maven中使用net.sf.json-lib
    设计 REST 风格的 MVC 框架
    Java 5种字符串拼接方式性能比较
    spring获取webapplicationcontext,applicationcontext几种方法详解
  • 原文地址:https://www.cnblogs.com/skillking/p/9424431.html
Copyright © 2011-2022 走看看