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

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

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

package main
// import "fmt"
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param k int整型 
 * @return ListNode类
*/
func reverseKGroup( head *ListNode ,  k int ) *ListNode {
    nh := &ListNode{}
    tail := nh
    cur := head
    for {
        end := findHead(cur, k-1)
        if end == nil {
            tail.Next = cur
            break
        }
        // fmt.Printf("尾巴%d", end.Val)

        tmp := end.Next
        end.Next = nil

        tmpH := reverse(cur)
        tail.Next = tmpH
        tail = cur
        cur = tmp

    }
    return nh.Next
}

func findHead(head *ListNode, k int) *ListNode {
    t2 := head
    for i := 0; i < k; i++ {
        if t2 == nil {
            return nil
        }
        t2 = t2.Next
    }
    return t2
}

func reverse(head *ListNode) *ListNode {
    cur := head
    var pre *ListNode
    for cur != nil {
        tmp := cur.Next
        cur.Next = pre
        pre = cur
        cur = tmp
    }
    return pre
}

全部评论

相关推荐

永不遗忘:才这么点算什么拉黑,我初筛连着挂几十次了,最后还是能进面
点赞 评论 收藏
分享
独玖:同二本,建议咱俩一起重开
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务