当前位置: 首页 > 面试题库 >

随机链表的复制

齐驰
2023-03-14
本文向大家介绍随机链表的复制相关面试题,主要包含被问及随机链表的复制时的应答技巧和注意事项,需要的朋友参考一下

考察点:链表

 

java">public RandomListNode copyRandomList(RandomListNode head) {
  
    if (head == null)
        return null;
  
    RandomListNode p = head;
  
    // copy every node and insert to list
    while (p != null) {
        RandomListNode copy = new RandomListNode(p.label);
        copy.next = p.next;
        p.next = copy;
        p = copy.next;
    }
  
    // copy random pointer for each new node
    p = head;
    while (p != null) {
        if (p.random != null)
            p.next.random = p.random.next;
        p = p.next.next;
    }
  
    // break list to two
    p = head;
    RandomListNode newHead = head.next;
    while (p != null) {
        RandomListNode temp = p.next;
        p.next = temp.next;
        if (temp.next != null)
            temp.next = temp.next.next;
        p = p.next;
    }
  
    return newHead;
}
 类似资料:
  • 我需要一个数据结构,将能够为给定的int提供前面和后面的邻居,这是结构的一部分。 null LinkedHashSet:查找项目非常快,顺序为O(1),检索下一个邻居非常快。没有明显的方法可以在不对集合进行反向排序的情况下获得上一个邻居。仅限装箱整数对象。 int[]:非常容易存储,因为不需要装箱,获取上一个和下一个邻居非常快,但由于索引未知,需要数组遍历,所以对项的检索是O(n),这是不可接受的

  • 条件随机场(Conditional Random Fields, 以下简称CRF)是给定一组输入序列条件下另一组输出序列的条件概率分布模型,在自然语言处理中得到了广泛应用。本系列主要关注于CRF的特殊形式:线性链(Linear chain) CRF。本文关注与CRF的模型基础。 1.什么样的问题需要CRF模型 和HMM类似,在讨论CRF之前,我们来看看什么样的问题需要CRF模型。这里举一个简单的例

  • NowCoder 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head。 // java public class RandomListNode { int label; RandomListNode next = null; RandomListNode random =

  • 问题内容: 作为我项目的一部分,我需要通过提供一组数字来创建不重复的2或3位数字随机数。我不想为此实现一个列表或数组,因为我应该为每个函数调用获取1个随机数。 我尝试使用Java的SecureRandom类来做到这一点。我也从某些站点获得了帮助,但是我陷入了困境,我们可以改组VALUES并完成它吗?但是我不知道该怎么办。谁能帮我? 问题答案: Fisher- yates随机播放算法 是必经之路。其

  • 一、题目 请实现函数ComplexListNode clone(ComplexListNode head),复制一个复杂链表。在复杂链表中,每个结点除了有一个next 域指向下一个结点外,还有一个sibling 指向链表中的任意结点或者null。 二、解题思路 在不用辅助空间的情况下实现O(n)的时间效率。 第一步:仍然是根据原始链表的每个结点N 创建对应的N’。把N’链接在N的后面。 第二步:设

  • 我对编程有点陌生,我想知道如何编写一个随机掷骰子的java程序。这方面的要求是: 私有成员: -final int numSides ^^die的边数 -public方法 ^^骰子(int sides) @@@将numSides设置为sides参数。 @@@用于创建具有不同边数的骰子,例如,在main中可以说骰子d6=新骰子(6)以创建六边die。 ^^int roll() ^^返回一个从1到包括