2011-04-03 74 views
0

要实现:如何实现getPrevious方法在单链表中的Java

public Object getPrevious(); and reset() method. 

*它应该返回使用相同的内部维护的指针GETNEXT(), *返回节点的内容()或getPrevious()

并且重置将重置列表,以便getPrevious()和getNext()从开头开始,它应该表现得像是我们从未称过这些方法。

在单链表中。我已经执行:

public int length(); 
public Object first(); 
public Object last(); 
public boolean lookup(Object obj); 
public Object get(int n); 
public void add(Object o); 
public int find(Object obj); 
public void delete(Object obj); 
public void delete(int n) 
+6

这就是为什么他们发明了双向链表。 – 2011-04-03 18:52:21

+0

您可以发布您的代码,以便远吗? – pajton 2011-04-03 18:54:06

+0

什么是GET的目的(INTñ )在你的情况? – smas 2011-04-03 19:03:02

回答

7

让以前的节点的唯一办法是,直到你找到它的一个节点,从头部走“下一个”节点是其前一个节点你想找到一个。效率低下,这就是为什么双链表往往比单链表更受欢迎的原因。 (函数式编程语言中的列表是个例外,它们通常是不可变的......通过记住“头”列表和新的尾部值,您可以“有效地追加”到不可变的单链表中。如果列表已经被虽然双链接)

2

大多数情况下,你可以在Node,在那里你只需拨打node.getNext().getValue()getNext()(如果你有一个Node两个领域 - 。Object valueNode next好了,你可以有Node previous,以便您以相反顺序遍历列表(并且您将不得不存储尾部而不是头部)

getPrevious()(或getNext())在名单上本身就意味着这个名单有一个迭代的位置,这通常不是这种情况。

0

我猜,你有什么当前元素具有索引(如果不使用find()方法)的信息,所以基本上你可以拨打:

public Object getPrevious() { 
    Object result = null; 
    if (currentNumber > 0) { 
     result = get(currentIndex - 1); 
    } 
    return result; 
} 

另一种解决方案可以实现,则FindPrevious():它会从头到目前的节点迭代,并记住前一个节点是什么,然后返回它

+0

我没有currentIndex。我需要实现getPrevious和reset() – mysteriousboy 2011-04-03 19:48:37

+0

,所以使用你的find()来找到currentIndex – smas 2011-04-03 19:57:53

+0

但是Objects会是什么,我该如何跟踪对象,因为它应该返回getNext()返回的内容。 – mysteriousboy 2011-04-03 20:32:33

0

是否有可能做到这一点,同时仍然保持单链表?是的,但在你做之前,你应该停下来想一想。如果这是为了一个学校任务或什么的;那么这个问题很有可能是修辞性的,并且意味着让你思考一个链表的性质。所以除非你的学校作业(再次 - 我只是假设这是为了学校)明确地说“为一个单链表实现一个getPrevious方法”我不会这样做。

链表的概念并不特定于Java。它指的是一个普遍接受的定义,如何最好地表示一个数据集合,使得单向迭代(因此名称为SINGLY链表)速度非常快。换句话说,假设你有一个待办事项清单;而且你知道你总是会通过你的待办事项列表来处理你的事情,而你列表中的所有任务都是相互独立的;所以你永远不必知道你在路上需要做2或3个任务。在这种情况下,您将使用单个链接列表。

这里的要点是,你可能会问错误的问题。而不是问: “如何获得单链表中的前一个元素”您应该问“链表是否真的是最有用的数据结构?“一旦你想过我会建议寻找到一个doubly-linked list作为@Bart煮布锅评论。