传送门
牛客面试笔试必刷101题 ---------------- 链表中的节点每k个一组翻转
题目以及解析
题目
解题代码及解析
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!