2021-11-29:给定一个单链表的头节点head,每个节点都有value(>0),给定一个正数m, value%m的值一样的节点算一类, 请把所有的类根据单链表的方式重新连接好,返回每一类的头节点

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-11-29:给定一个单链表的头节点head,每个节点都有value(>0),给定一个正数m, value%m的值一样的节点算一类, 请把所有的类根据单链表的方式重新连接好,返回每一类的头节点相关的知识,希望对你有一定的参考价值。

2021-11-29:给定一个单链表的头节点head,每个节点都有value(>0),给定一个正数m,
value%m的值一样的节点算一类,
请把所有的类根据单链表的方式重新连接好,返回每一类的头节点。
来自腾讯。

答案2021-11-29:

自然智慧即可。用map。

代码用golang编写。代码如下:

package main

import "fmt"

func main() 
    head := &Nodevalue: 10
    head.next = &Nodevalue: 11
    head.next.next = &Nodevalue: 7
    head.next.next.next = &Nodevalue: 4
    head.next.next.next.next = &Nodevalue: 5
    head.next.next.next.next.next = &Nodevalue: 13
    head.next.next.next.next.next.next = &Nodevalue: 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代码

以上是关于2021-11-29:给定一个单链表的头节点head,每个节点都有value(>0),给定一个正数m, value%m的值一样的节点算一类, 请把所有的类根据单链表的方式重新连接好,返回每一类的头节点的主要内容,如果未能解决你的问题,请参考以下文章

算法总结之 合并两个有序的单链表

栈和队列----将单链表的每K个节点之间逆序

栈题目一道

算法总结之 单链表的选择排序

栈和队列----合并两个有序的单链表

leetcode 19: 删除链表的倒数第N个节点