首页 > 其他分享 >面试必刷TOP101:3、链表中的节点每k个一组翻转

面试必刷TOP101:3、链表中的节点每k个一组翻转

时间:2023-10-14 19:32:04浏览次数:28  
标签:ListNode int param 节点 链表 必刷 TOP101 翻转

一、题目

将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表

如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样

你不能更改节点中的值,只能更改节点本身。

面试必刷TOP101:3、链表中的节点每k个一组翻转_链表

二、题解

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode reverseKGroup (ListNode head, int k) {
        // write code here
        if(k <= 1) return head;
        if(head == null) return head;
        ListNode node = head;
        int len = length(head);
        head = node;
        int sx = len / k;    //分成sx块向下取整(默认向下) 因为处不尽的后面必然凑不满k个
        ListNode result = new ListNode(0);
        ListNode now = result;
        int cnt = 0;
        for(int i = 0; i < sx; i ++){
            ListNode tmp = null;
            for(int j = 0; j < k; j ++){    //将第i块的元素翻转
                ListNode bl = head.next;
                head.next = tmp;
                tmp = head;
                head = bl;
            } 
            now.next = tmp;
            while(now.next != null) now = now.next;    //将now更新到最前的一个点
        }
        now.next = head;
        return result.next;
    }
    public int length(ListNode now){    //获取链表长度
        int cnt = 0;
        if(now != null) cnt = 1;
        while(now.next != null){
            cnt ++; now = now.next;
        }
        return cnt;
    }
}

标签:ListNode,int,param,节点,链表,必刷,TOP101,翻转
From: https://blog.51cto.com/u_16244372/7863064

相关文章

  • 面试必刷TOP101:2、链表内指定区间反转
    一、题目将一个节点数为size链表m 位置到n位置之间的区间反转,要求时间复杂度O(n),空间复杂度O(1)。例如:importjava.util.*;/**publicclassListNode{*intval;*ListNodenext=null;*}*/publicclassSolution{/****@paramhea......
  • 力扣19.删除链表的倒数第 N 个结点
    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5] 示例2:输入:head=[1],n=1输出:[] 示例3:输入:head=[1,2],n=1输出:[1]  提示:链表中结点的数目为 sz1<=sz<=300<=N......
  • 面试必刷TOP101:1、反转链表
    一、题目给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。示例:输入:{1,2,3}返回值:{3,2,1}二、题解2.1使用栈求解栈是先进后出的。实现原理就是把链表节点一个个入栈,当全部入栈完之后再一个个出栈,出栈的时候在把出栈的结点......
  • python 链表
    fromtypingimportOptionalclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextclassSolution:defpartition(self,head:Optional[ListNode],x:int)->Optional[ListNode]:lessListPre......
  • 《剑指offer》面试题的Java实现-从尾到头打印链表
    输⼊⼀个链表的头节点,按链表从尾到头的顺序返回每个节点的值(⽤数组返回)。⽐如下⾯的链表: publicstaticclassLinkNode{intvalue;LinkNodenext;LinkNode(intvalue){this.value=value;}}//思路:将链表进行遍历,在遍历的过程中记录元素的个数,//然......
  • 83、删除链表重复节点
    Givenasortedlinkedlist,deleteallduplicatessuchthateachelementappearonlyonce.Forexample,Given1->1->2,return1->2.Given1->1->2->3->3,return1->2->3 publicListNodedeleteDuplicates(ListNodehead){if(head=......
  • LVGL双向链表学习笔记
    LVGL双向链表学习笔记1、LVGL链表数据类型分析对于LVGL双向链表的使用,我们需要关注lv_ll.h和lv_ll.c两个文件,其中lv_ll.h里面包含了链表结构类型定义,以及相关API的声明,首先介绍链表的结构类,如下图所示:一开始看到这个类型声明我是懵的,怎么链表的一个结点的类型是uint8_t,那是不......
  • 【UVA 12657】Boxes in a Line 题解(静态双向链表)
    您在编号为1的表格上有n个方框。n从左到右。您的任务是模拟4命令类型:•1XY:将框X向左移动到Y(如果X已经是Y的左侧,则忽略此项)•2XY:将框X向右移动到Y(如果X已经是Y的右侧,则忽略此项)•3XY:交换盒X和Y•4:反转整条线路。命令保证有效,即X不等于Y。例如,如果n=6,在执行114之后,该行......
  • 141. 环形链表
    给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos 不作为参数进行传递 。仅仅是为了标......
  • 03-链表常见六个操作
    我的想法:问题:正确思路:适用场景:代码//题目:/**学习到:*写代码过程中:*1.类成员变量使用'_',变量名前后都可*2.要弄清出index(第几个元素,从0开始)与_size(链表中元素个数)的意义*2.*代码逻辑:*1.写代码之前,一定要弄清出目的,以及实现他需要的东西,条件*2.操作前......