题目:给定一个单链表的头结点head,实现一个调整单链表的函数,使得每K个节点为一组进行逆序,并从链表的尾部开始组起,头部剩余节点数量不够一组的不需要逆序。
要求:不可使用队列或栈作为辅助。
举例:设链表为【1->2->3->4->5->6->7->8->nil】,K=3,则链表可划分为6->7->8、3->4->5、1->2三组,逆序组装之后为【1->2->5->4->3->8->7->6->nil】,其中【1->2】这一组因为不够三个节点,所以不需要进行调整。
解析:上述题目的难点主要是从链表的尾部开始组起,因此可先将单链表进行完整的逆序,之后进行遍历,然后把每K个节点为一组分别进行分割和逆序以及组装,最后再把链表进行一次完整的逆序,就完成上述题目了,毕竟两次逆序相当于没有逆序。
实现代码如下:
package main
func main() {
k := 3
singleList := CreateLinkedList()
singleList.InsertNode(1, 1)
singleList.InsertNode(2, 2)
singleList.InsertNode(3, 3)
singleList.InsertNode(4, 4)
singleList.InsertNode(5, 5)
singleList.InsertNode(6, 6)
singleList.InsertNode(7, 7)
singleList.InsertNode(8, 8)
singleList.ReverseSingleNode()
listCount := singleList.GetNodeLength()
for i := 1; i <= listCount; i++ {
num := i
numStart := num
numEnd := num + k - 1
if numEnd <= listCou