题目
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例
给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5
解析
将k个节点进行分组进行反转链表,是206题号
答案
func reverseKGroup(head *ListNode, k int) *ListNode {
first := &ListNode{0,head}
pre := first
//根据k个节点进行分组
for head != nil {
tail := pre
for i := 0; i<k; i++ {
tail = tail.Next
if tail == nil {
return first.Next
}
}
next := tail.Next
head, tail = reverseList(head, tail)
pre.Next = head
tail.Next = next
pre = tail
head = tail.Next
}
return first.Next
}
func reverseList(head, tail *ListNode)(*ListNode, *ListNode){
//迭代方式进行反转链表的操作
var cur *ListNode = head
var pre *ListNode = nil
for pre != tail {
next := cur.Next
cur.Next = pre
pre = cur
cur = next
}
return tail, head
}