题解 | #链表中的节点每k个一组翻转#

链表中的节点每k个一组翻转

http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

思路:给定一个链表,和一个小组的长度k,可以将一个小组分为(用切片表示:)[0:k][k:2k]...多余的不用进行翻转。这里可分为小组的数量即是链表切片与给定k的商,这里用nums表示。接下来只需要循环将上述分成的切片的切片进行“交换”,最后统一指定Next,(最后一个节点的Next置为nil)。

func reverseKGroup(head *ListNode, k int) *ListNode {
	// write code here
	if head == nil {
		return nil
	}
	var res []*ListNode
    //将结点都导入切片
	for head != nil {
		res = append(res, head)
		head = head.Next
	}
	l := len(res)
	nums := l / k
	for i := 0; i < nums; i++ {
		SwapRes(res[i*k : (i+1)*k])
	}
	node := outRes(res)
	return node
}
//循环指定每个节点的Next,最后一个置为nil
func outRes(res []*ListNode) *ListNode {
	for i := 0; i < len(res)-1; i++ {
		if res[i] != nil {
			res[i].Next = res[i+1]
		}
		res[len(res)-1].Next = nil
	}
	return res[0]
}
//给传进来的切片进行“交换”操作
func SwapRes(res []*ListNode) {
	var l int
	if len(res)%2 == 0 {
		l = len(res) >> 1
	} else {
		l = (len(res) - 1) >> 1
	}
	for i := 0; i < l; i++ {
		tmp := res[i]
		res[i] = res[len(res)-1-i]
		res[len(res)-1-i] = tmp
	}
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 15:39
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务