首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在java中复制链表?

如何在java中复制链表?
EN

Stack Overflow用户
提问于 2012-12-04 23:24:06
回答 2查看 8K关注 0票数 1

我的Node类表示链表的一个节点,其定义如下:

代码语言:javascript
运行
复制
public class Node
{
    Node next;
    String data;

    public Node (String data)
    {
        this.data = data;
    }
}

我是这样使用它的:

代码语言:javascript
运行
复制
Node node, head, tail;
String name; // name to be entered
int count = 0;

// initialize the head to null

head = null;

do
{
    System.out.print ("Enter a name. Type q to end.");
    name = stdin.readLine ();

    // create a new node if the user doesn't type q
    if (!name.equals ("q"))
    {
        node = new Node (name);
        node.next = head;
        count++;

        // update the head to point to the new front of the list
        head = node;
    }
}
while (!name.equals ("q"));  // loop continues until "quit" selected
node = head; 

假设我想要将名称备份到一个方法中,以防我修改原始列表。我该怎么做呢?而不将其写入文件。

Name是存储在链表中的变量,在用户按下q后,我想要修改列表,同时保留用户存储的内容作为备份,以防他/她想要回溯或查看原始列表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-04 23:33:37

因此,听起来您似乎想要保留链表中每个元素的先前名称的历史记录。我建议您在链表的每个节点中存储一个数组或链表,以显示该项的先前历史记录。例如:

代码语言:javascript
运行
复制
public class Node
    {
    Node next;
    String data;
    LinkedList<String> history;

    public Node (String data)
    {
        this.data = data;
    }
}

你可以用很多方式来填充它,这一切都取决于你的用例。

另外,为什么要实现自己的链表呢?Java已经提供了一个链表实现(java.util.LinkedList)。如果您需要各种链表的有序列表,我建议您使用它。如果您这样做了,那么创建一个包含在其中的新数据结构,该结构具有名称和历史记录,然后只维护其中的历史记录,例如:

代码语言:javascript
运行
复制
public class DataItem
    {
    String data;
    LinkedList<String> history = new LinkedList<>();

    public DataItem (String data)
    {
        this.data = data;
    }

    public void setData (String data)
    {
        this.history.add(0, this.data);
        this.data = data;
    }
}

最后,请记住字符串在Java中是不可变的。因此,字符串不能被修改。你只需要在某个地方保留对前一个字符串的引用,而不需要复制值。

为了最终复制对象树,您需要执行所谓的深度复制,基本上遍历整个结构和所有集合,并将每个对象克隆到一个新对象中。

票数 0
EN

Stack Overflow用户

发布于 2012-12-04 23:39:50

最好将Node设置为不可变的。因此,每次要修改节点时,都会创建一个新节点。并将旧的存储在链表历史中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13706194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档