当前位置: 首页 > 知识库问答 >
问题:

在java中,如何在特定密钥中更新哈希映射中的节点?

楚畅
2023-03-14

我想从链表中删除所有偶数节点。如何更新hashmap特定键中的节点<代码>H.get(0)。next=temp不工作。期望的输出是24,但我没有得到它。

public static void main(String[] args) {
    head = new Node(1);
    head.next = new Node(2);
    head.next.next = new Node(3);
    head.next.next.next = new Node(4);
    head.next.next.next.next = new Node(5);
    Node temp=head;
    HashMap<Integer,Node>H=new HashMap<>();
        while(temp!=null) {
            if(temp.data%2==0) {
                if(!H.containsKey(0)) {
                    H.put(0, temp);
                } else {
                    //This statement is not working
                    H.get(0).next=temp;  
                }
            }
        temp=temp.next;
        }
        head=H.get(0);
        while(temp!=null) {
            System.out.print(temp.data);
            temp=temp.next;
    
        }
    }
}

共有2个答案

朱丰
2023-03-14

在链表上执行操作时,通常不需要HashMap,只需保留节点的引用并相应地删除它们。我觉得这样应该行得通。

正如您所见,我没有将引用存储在HashMap中,但我尝试从头部到尾部进行探索,保留我探索的前一个节点的引用。为什么?因为当我找到一个偶数节点时,我想将前一个节点连接到下一个节点,这样我就可以删除当前节点。我有偶数节点是头部的边缘情况,因为之前没有分配节点。

无法真正尝试此代码,但可能可以作为您尝试做的事情的参考。

public static void main(String[] args) {
    head=new Node(1);
    head.next=new Node(2);
    head.next.next=new Node(3);
    head.next.next.next=new Node(4);
    head.next.next.next.next=new Node(5);

    Node current = head;
    Node prev = null;
    while(current != null){
        if(current.data%2==0){
            if(current == head){
              head = current.next;
            } else {
              prev.next = current.next;
              current = current.next;
            }
        } else {
            prev = current;
            current = current.next;
        }
    }
    
    current = head
    while(current!=null){
        System.out.print(current.data);
        current=current.next;
    }
}
夔高寒
2023-03-14
  • 在最后一个循环中,您在(temp!=null){时编写了,但temp在循环后为空,并且不引用头部。
  • 我在这里看不到使用HashMap的价值。

下面是我们可以执行的操作,以删除所有具有偶数数据的节点:

Node head;
head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(3);
head.next.next.next = new Node(4);
head.next.next.next.next = new Node(5);

Node oddTail = null, curr = head;

while (curr != null) {
    if (curr.data % 2 != 0) { // Odd data
        if(oddTail != null){
            oddTail.next = curr; // Update oddTail
        }

        oddTail = curr;
    }

    curr = curr.next;
}

if(oddTail != null){ // The oddTail.next might point to a node with even data
    oddTail.next = null; 
} else{
    head = null; // No nodes with odd data
}

curr = head;

// Print the list
while(curr != null){
    System.out.println(curr.data);
    curr = curr.next;
}

输出:

1
3
5

 类似资料:
  • 我需要从我的Android向Algolia发送数据,发送的数据应该是JSONObject格式(导入org.json.JSONObject) Algolia中的数据应采用此格式 所以在Android中,我这样设置代码 在这行代码中 那么我应该怎么做才能以JSONObject格式发送hashmap数据呢?

  • 问题内容: 我有一个哈希表,其键的模式为USER_TEL,例如: 现在,我想获取密钥中具有相同TEL的所有用户的地址。 我想出的是: 我得到而不是价值观。 问题答案: 您应该使用HSCAN命令。 例如: 更新资料 Python实现:

  • 我不太熟悉Java流收集器框架,我想解决现实世界中的问题,并想使用流。 下面是实际问题的简化假设场景。 我有一个接口,它的实现返回一个

  • 我有4节课。其中一个保存有关客户的信息。另一个是关于订单的。另外两个类扮演注册表角色,一个是客户注册表,另一个是订单注册表。 Orders registry有一个哈希映射,如下所示: 客户注册也是如此。 类orders具有int orderid。类客户具有int customerid。我通过两个注册中心添加了演示数据(假设一个客户的客户ID为100,一个订单的订单ID为500)。 我编写了一些简单

  • 问题内容: 我需要解密密码。密码已使用功能加密。 现在,我们假设它存储在数据库中(有一个“用户”表,其中包含用户名,密码等),我需要登录:我必须查看用户输入的密码是否与存储在其中的加密密码匹配。数据库。 这是SQL代码… …但未加密,因此不等于表用户的密码字段中存储的内容… 所以,有一个使用?后解密的功能。还是应该更改我的加密方法?或者还有什么? 问题答案: Bcrypt是一种单向哈希算法,您无法

  • 本文向大家介绍Java中并发哈希映射和同步哈希映射之间的区别,包括了Java中并发哈希映射和同步哈希映射之间的区别的使用技巧和注意事项,需要的朋友参考一下 并发Hashmap是jdk1.5中引入的类。并发哈希映射仅在添加或更新映射时在称为片段的存储桶级别应用锁。因此,并发哈希映射允许对映射进行并发读写操作。  同步hashmap(Collection.syncronizedHashMap())是C