GO题解 | #链表中的节点每k个一组翻转#
来自
【GO题解】
559 浏览
0 回复
2021-04-10
链表中的节点每k个一组翻转
http://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
go解题答案
- 思路概括:外层子序数,内层翻转数
- 思路核心:主要解决三个点
1、待翻转子序列个数,也就是外层for循环次数,需要知道链表长度
2、每个子序列翻转次数,每k个节点需要操作的次数,内层for循环次数
3、翻转操作,使用头插法,需要3个指针func reverseKGroup( head *ListNode , k int ) *ListNode {
if k==1 || head==nil || head.Next==nil {
return head
}
// 初始化翻转需要的指针
res:=&ListNode{}
res.Next = head // 头插法需要
pre:= res
cur:=head
count:=0 // 链表长度
for head!=nil {
head=head.Next
count++
}
for i:=0;i<count/k;i++{
for j:=1;j<k;j++{ // n个节点需要n-1测,所以j从j-1开始
temp:=cur.Next
cur.Next=temp.Next
temp.Next=pre.Next //注意不是temp.Next=cur,要指向子序列头节点
pre.Next=temp
}
//调整指针
pre=cur
cur=cur.Next
}
return res.Next
}
如果有帮助请点个赞哦, 更多文章请看我的博客
题主背景
- 从业8年——超级内卷500Q技术经理——目前专注go和微服务架构