Go语言每日一练 ——链表篇(三)

传送门

牛客面试笔试必刷101题 ---------------- 链表中的节点每k个一组翻转

题目以及解析

题目

Go语言每日一练 ——链表篇(三)_第1张图片

解题代码及解析

package main
import _"fmt"
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param k int整型 
 * @return ListNode类
*/

func Getlength(head *ListNode) int{
    size:=0
    for i:=head;i!=nil;i=i.Next{
        size++
    }
    return size
}

func reverseKGroup( head *ListNode ,  k int ) *ListNode {
    if head==nil||head.Next==nil||k==1{
        return head
    }
    prev:=&ListNode{Next:head}
    curr:=head
    dump:=prev
    var next *ListNode
    size:=Getlength(head)
    for i:=0;i<size/k;i++{
        for j:=1;j<k;j++{
           next=curr.Next
           curr.Next=next.Next
           next.Next=prev.Next
           prev.Next=next
        }
        prev=curr
        curr=curr.Next
    }
    return dump.Next
}

解析:

这题依旧是一道链表反转的题目,只不过这次它指定了每个区间均要翻转链表为题目增添了难度,这里博主的思路主要是我们先统计链表的长度来判断究竟需要进行几次翻转,在编写每个区域链表翻转的代码,再次由于链表反转的方式不同,所以博主这里的链表三指针迭代法与之前不同,大家可以稍微研究一下,over!

你可能感兴趣的:(Go语言每日一题,golang,链表,开发语言,数据结构)