【问题标题】:How to start a linked list? [closed]如何开始一个链表? [关闭]
【发布时间】:2013-04-06 09:34:21
【问题描述】:

过去一小时我一直试图弄清楚链接列表是什么,我了解到它包含节点和链接。这个节点实际上是什么?你如何在java中定义一个链表?虽然我读过不同的程序,但我想要最基本的程序,而不使用任何直接函数。如何工作和访问链表?以及如何存储链接和节点? 这些是我感到困惑的几个问题。谢谢您,我们将不胜感激。

【问题讨论】:

  • 这可以通过一点点研究找到。去吧,然后尝试示例。如果您有问题,请发布另一个问题。
  • 我说我检查了很多程序。我就是想不通。我一直只使用数组。 @PreetSangha
  • @Satya 很有帮助。

标签: java linked-list computer-science


【解决方案1】:

链表是一个有序列表,其中一个节点引用下一个节点。您的列表应该跟踪当前节点,其中包含对下一个节点的引用。当列表被迭代时,当前节点被切换到它的下一个节点,其中包含对下一个节点的引用。循环从那里继续。

一个简单的谷歌搜索揭示了很多关于 LinkedList 的信息。这个wikipedia page解释得很好。

也许节点界面的图示会有所帮助。

public interface Node(){

    public Node next();
    public Node prev();
}

使用此接口,您可以创建节点“链”,因为节点具有对下一个和前一个节点的引用。

我应该注意我可能误读了您的问题,我以为您想创建自己的实现。

【讨论】:

  • 是的,我读过。实现有点混乱。
  • @Neer 什么部分令人困惑?
  • 链接实际上是如何工作的?我怎样才能访问这一切。
  • Kevin Bowsersox 谢谢!现在已经很清楚了。
【解决方案2】:

实现不是您需要担心能够使用列表的事情:

    List<String> yourList = new LinkedList<String>();

    yourList.add("item1");
    yourList.add("item2");
    // etc

    // iterating example
    for(String currentNodeElementOrWhatever : yourList) {
       // use this element somehow
       System.out.println(currentNodeElementOrWhatever);
    }

在这种情况下,“item1”和“item2”是节点,它们每个都有到下一个节点的链接,因此 item1 -> item2 和 item2 -> null 因为它是最后一个项目。

【讨论】:

  • 谢谢 :) 在哪里以及如何使用这些链接。它是自动实现的还是我也需要实现链接。如果是整数,我可以使用 ?
  • 链接只是实现细节,我可以提供更多信息,但如果你只是想开始运行,你现在真的不需要这个。您可以使用 int 但您必须像这样声明列表: List yourList = new LinkedList();这称为自动装箱,如果您也喜欢,可以阅读更多信息。
  • 感谢您的帮助。 :)
  • 要使用列表,您可以执行 yourList.get(0)、yourList.get(1) 等操作,也可以通过 yourList.iterator.next() 使用迭代器,但请注意这里通常最好使用 Java foreach 循环遍历列表,将其添加到上面的代码中
  • 好的,这将是最好的。是的,我想要这样的东西。
【解决方案3】:

这是一个 Node 的类示例。

public class Node<T>{
      Node next;
      T value;
}

LinkedList 的伪代码实现示例:

Add( val){
    Node newNode = new Node();
    newNode.next = firstNode;
    tailNode.next = newNode;
    newNode.value = val;
}

Get( idx){
    Node currentNode = firstNode;
    while(idx--!= 0)
        currentNode = currentNode.next;
    return currentNode.value;
}

Delete(idx){
   Node nodeToRemove= firstNode;
   while(idx-- > 0)
        nodeToRemove= currentNode.next;
    nodeToRemove.next = null;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2014-07-07
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多