题解 | #链表中的节点每k个一组翻转#

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

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

package main
import . "nc_tools"

/*
//递归,时空On
func reverseKGroup( head *ListNode ,  k int ) *ListNode {
    // write code here
    cur := head

    for i := 0; i < k; i++ {
        if cur == nil {
            return head
        }
        cur = cur.Next
    }

    pre := reverseKGroup(cur, k)
    curr := head

    for i := 0; i < k; i++ {
        temp := curr.Next
        curr.Next = pre
        pre = curr
        curr = temp
    }
    return pre
}
*/


//迭代,时间On,空间O1
func reverseKGroup(head *ListNode, k int) *ListNode {
    dummy := &ListNode{Next : head}
    prem := dummy

    for head != nil {                               //分组
        cur := prem                //不是head哦
        for i := 0; i < k; i++ {
            cur = cur.Next
            if cur == nil {
                return dummy.Next
            }
        }

        tmp := cur.Next
        head, cur = myReverse(head, cur)            //翻转

        prem.Next = head                            //合并
        cur.Next = tmp

        prem = cur
        head = cur.Next
    }
    return dummy.Next
}


func myReverse(head, cur *ListNode) (*ListNode, *ListNode) {
    pre := cur.Next
    modn := head

    for pre != cur {
        temp := modn.Next
        modn.Next = pre
        pre = modn
        modn = temp
    }
    return cur, head
}











全部评论

相关推荐

一表renzha:你点进去没打招呼他也会有提示的,之前我点进美的,还没打招呼,他马上给我发了不太合适哦
点赞 评论 收藏
分享
05-20 21:57
已编辑
门头沟学院 Java
喜欢吃卤蛋的悲伤蛙在提需求:建信融通没消息吧,我2说有实习挂简历不理了
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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