天天看點

2021-11-29:給定一個單連結清單的頭節點head,每個節點都有v

2021-11-29:給定一個單連結清單的頭節點head,每個節點都有value(>0),給定一個正數m,

value%m的值一樣的節點算一類,

請把所有的類根據單連結清單的方式重新連接配接好,傳回每一類的頭節點。

來自騰訊。

答案2021-11-29:

自然智慧即可。用map。

代碼用golang編寫。代碼如下:

package main

import "fmt"

func main() {
    head := &Node{value: 10}
    head.next = &Node{value: 11}
    head.next.next = &Node{value: 7}
    head.next.next.next = &Node{value: 4}
    head.next.next.next.next = &Node{value: 5}
    head.next.next.next.next.next = &Node{value: 13}
    head.next.next.next.next.next.next = &Node{value: 14}
    ret := split(head, 3)
    for i := 0; i < len(ret); i++ {
        nod := ret[i]
        for nod != nil {
            fmt.Print(nod, "  ")
            nod = nod.next
        }
        fmt.Println("")
    }

}

type Node struct {
    value int
    next  *Node
}

type Ht struct {
    h *Node
    t *Node
}

func NewHt(a *Node) *Ht {
    ret := &Ht{}
    ret.h = a
    ret.t = a
    return ret
}

func split(h *Node, m int) []*Node {
    map0 := make(map[int]*Ht)
    for h != nil {
        next := h.next
        h.next = nil
        mod := h.value % m
        if _, ok := map0[mod]; !ok {
            map0[mod] = NewHt(h)
        } else {
            map0[mod].t.next = h
            map0[mod].t = h
        }
        h = next
    }
    ans := make([]*Node, m)
    for mod, _ := range map0 {
        ans[mod] = map0[mod].h
    }
    return ans
}           

複制

執行結果如下:

2021-11-29:給定一個單連結清單的頭節點head,每個節點都有v

圖檔

左神java代碼