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和微服务架构