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

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

http://www.nowcoder.com/questionTerminal/b49c3dc907814e9bbfa8437c251b028e

  1. 初始化头节点与尾节点

  2. 使用头插法将后续 K-1 个节点插入头节点与尾节点之间,使前 K 个节点倒转,然后更新头节点与尾节点。

  3. 循环上述步骤,直至尾部节点的 Next 指向 nil 或 插入的节点数小于 k-1,返回链表头节点。

  4. 1 对于插入节点小于 k-1,此时需要将逆转的节点进行还原,然后返回链表头节点。

    package main
    import . "nc_tools"
    func reverseKGroup( head *ListNode ,  k int ) *ListNode {
      // write code here
      if head == nil{
          return nil
      }
      root := &ListNode{Val: 0,Next: nil}
      root.Next = head
      tmproot := root 
      cur := head
      next := cur.Next    
      for{
          i:=1
          for ;i<k && next != nil;i++{
    
              cur.Next = next.Next     
              tmproot.Next,next.Next = next,tmproot.Next 
              next = cur.Next
    
          }
    
          if i==k{
              if cur.Next != nil{
                  tmproot = cur
                  cur = tmproot.Next
                  next = cur.Next   
              }else{
                  break
              }
    
          }else{
              for j:=1;j<i;j++{
                  t := tmproot.Next
                  tmproot.Next = tmproot.Next.Next
    
                  //t2 := cur.Next
                  cur.Next,t.Next = t,cur.Next
                  //t.Next = t2
    
              }
              break
          }
      }
      return root.Next    
    }
全部评论

相关推荐

芜湖e:我在这家待过,老板就一rz,能别去就别去,还在用jsp,合同也不主动给你签,上班看一下手机他就要把你叫到办公室说你,公司项目也老,还在用jsp,纯屎山代码,我干了三天就跑路了,工资也没给😅
点赞 评论 收藏
分享
头顶尖尖的程序员:黑马外卖➕鱼皮bi
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务