首页 > 其他 > 详细

K个一组反转链表(golang)

时间:2020-12-30 22:21:34      阅读:66      评论:0      收藏:0      [点我收藏+]
//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverseKGroup(head *ListNode, k int) *ListNode {
    
    length:=0
    pre:=head
    //计算链表长度
    for pre!=nil{
        length++
        pre = pre.Next
    }
    
    //k个一组的次数
    time:=length/k
    dummy:=new(ListNode)
    dummy.Next = head
    pre = dummy    //每一组前面的数,头插法,每次都把move放在pre后面
    var nexthead,move *ListNode
    for i:=0;i<time;i++{
        nexthead = pre.Next    //每个k长度的开头,逐渐变为末尾
        move = nexthead.Next//第二个,不断向后移动,把move插入到pre后面,
        for j:=0;j<k-1;j++{
            nexthead.Next = move.Next
            move.Next = pre.Next
            pre.Next = move
            move = nexthead.Next
        }
        //经过头插法,nexthead逐渐变为结尾,结束一轮循环时,nexthead变为结尾,是下一个k长度的pre,
        pre = nexthead  //下一个k同样的方式,头插法放pre后面
        
    }
    return dummy.Next
}

迭代法,还有递归法,

 

K个一组反转链表(golang)

原文:https://www.cnblogs.com/9527s/p/14212250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!