• leetcode刷题笔记二十五 K 个一组翻转链表 Scala版本


    leetcode刷题笔记二十五 K 个一组翻转链表 Scala版本

    源地址:25. K 个一组翻转链表

    问题描述:

    给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

    k 是一个正整数,它的值小于或等于链表的长度。

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

    示例:

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

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

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

    说明:

    你的算法只能使用常数的额外空间。
    你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

    代码补充:

    //拿到这个题目的时候,第一想法是通过栈对K个元素进行管理,将前K个元
    //素入栈,然后依次弹出重构链表
    //查阅相关资料,发现更好的方法主要是递归法,相对于使用栈管理,对空
    //间和时间有了一些提升
    //将问题进行分解,链表分解出K长度、三指针分解后的链表倒叙和对之后的链表进行重复操作
    /**
     * Definition for singly-linked list.
     * class ListNode(var _x: Int = 0) {
     *   var next: ListNode = null
     *   var x: Int = _x
     * }
     */
    object Solution {
        def reverseKGroup(head: ListNode, k: Int): ListNode = {
        		//当链表为空或只有一个节点或者k=1,直接返回
                if(head == null || head.next == null || k == 1) return head
    			
    			//设立a b指针用来获取K长度的指针
                var a = head
                var b = head
    
    			//将b指针向右移动K次,如果不到K次直接返回
                for( i <- 0 until k ){
                    if (b == null) return head
                    b = b.next
                }
    
    			//对本次获取的K长度的链表进行倒叙
                val ans = reverse(a,b)
                //此时a为最右节点,对其后链表进行处理
                a.next = reverseKGroup(b,k)
                return ans
        }
    	
        //通过三指针进行两个节点间倒序,通过循环多次执行达到链表倒叙
        def reverse(a:ListNode, b:ListNode):ListNode = {
            var pre:ListNode = null
            var cur = a
            var nxt = a
    
            while (cur != b) {
                nxt = cur.next
                cur.next = pre
                pre = cur
                cur = nxt
            } 
            return pre
        }
    }
    
    

    补充:

  • 相关阅读:
    FastStone Capture(FSCapture) 注册码
    Qt下开发及调用带界面的DLL
    Gin生成证书开启HTTPS
    Gin+Vue3开启nginx gzip但是不生效。
    GIn+Docker+docer-compose
    Go字符串切片
    Vue使用AG Grid嵌套element-plus
    GIN转换UTC时间
    GORM对实现datetime和date类型时间
    (二)PaddleOCR 编译 ocr_system.dll
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/12783541.html
Copyright © 2020-2023  润新知