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
}
複制
執行結果如下:
圖檔
左神java代碼