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

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

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

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 {
    groupNum := k
	dummy := &ListNode{Val: 0}
	pre := dummy
	end := dummy
	dummy.Next = head
	for end != nil {
		for i := 0; i < groupNum && end != nil; i++ {
			end = end.Next
		}
		if end == nil {
			break
		}
		start := pre.Next
		next := end.Next
		end.Next = nil
		pre.Next = reversion(start)
		start.Next = next
		pre = start
		end = pre
	}
	return dummy.Next
}

func reversion(start *ListNode) *ListNode {
	//开始颠倒链表
	var res *ListNode
	for start != nil {
		next := start.Next
		start.Next = res
		res = start
		start = next
	}
	return res
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务