牛客: BM3 链表中的节点每k个一组翻转

牛客: BM3 链表中的节点每k个一组翻转

文章目录

  • 牛客: BM3 链表中的节点每k个一组翻转
  • 题目描述
  • 题解思路
  • 题解代码

题目描述

牛客: BM3 链表中的节点每k个一组翻转_第1张图片

题解思路

用一个[]int保存一组节点的val,一个快节点先遍历k个节点将节点的val顺序保存在[]int中,然后慢节点再遍历k个节点,逆序将[]int的val设置给节点的val

题解代码

package main

import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param k int整型 
 * @return ListNode类
*/
func reverseKGroup( head *ListNode ,  k int ) *ListNode {
    // write code here
    if head == nil || head.Next == nil || k == 1 || k == 0 {
        return head
    }
    vals := make([]int, k)
    pre := head
    post := head
    for pre != nil {
        for i := k - 1; i >= 0; i-- {
            if post == nil {
                return head
            }
            vals[i] = post.Val
            post = post.Next
        }

        for i := 0; i < k; i++ {
            pre.Val = vals[i]
            pre = pre.Next
        }
    }

    return head
}

你可能感兴趣的:(数据结构与算法,链表,数据结构,算法)