双向链表

Doubly Linked List

我目前正在使用 DoublyLinkedList (DLL) 数据结构完成纸牌游戏的作业。我想从一副纸牌中随机选择4对纸牌,并在不切换节点的情况下交换纸牌的内容。所以基本上,我们只是使用随机生成器并根据剩余的卡片数量随机分配卡片的索引。问题是我如何将索引分配给卡片并交换它们。在 arraylist 中,我们只是简单地使用 get 和 set 方法。但是,对于双向链表 (DLL),我认为我们需要访问 DLL class?谁能帮忙?

public void swap() {
    int index1, index2;
    Card temp;
    Random generator = new Random();
    for(int i=0;i<4;i++){
     index1 = generator.nextInt( cards.getSize() - 1 );
     index2 = generator.nextInt( cards.getSize()- 1 );
     //swapping codes here which im stuck here
    }
}

所以你的卡组结构是这样的;一个 Deck 有一个 DLL,它有一个有卡片的节点。如果您想在不更改 DLL 中的节点的情况下交换卡片,您可以更改节点 data 字段。

您已经有了所需卡片的索引,所以现在获取对节点的引用。因为您使用的是列表,所以没有比实现线性搜索更好的方法了。在您的 DLL class 中,您可以创建类似 public Node getNode(Int n) 的方法。在这个方法中,从头开始循环到下一个节点n次,return那个节点。

假设 node1node2 是您使用先前方法或类似方法找到的节点类型的参数。您可以交换类型节点的 T 数据字段。在 deck class 中,您现在的 DLL 类型是 card。因此,使用 getData()setData() 方法交换值(在交换它们时,您必须创建一个临时变量来保存一个节点的数据)。