[英]Implementing an ADT linked list from scratch
我有一個班級項目,必須從頭開始構建基於ADT的鏈接列表(這意味着我不能使用任何標准Java ADT),然后使用該列表對一堆State
對象(每個對象也包含一個鏈接對象)進行排序按字母順序排列的Cities
列表)。 顯然,代碼的主干是手工的OrderedLinkedList
類,並且在弄清楚如何實現遍歷列表的findOrAdd
方法時遇到很多麻煩,如果傳遞的參數還沒有在列表中列表,將其添加到適當的位置(如果元素已經存在,則返回該元素)。 我所讀到的有關實現鏈接列表的大部分內容都不會在ADT中處理,因此很難在我的腦海中轉換並仍然全神貫注。 我的(公認不完整的)OLL代碼及其隨附的迭代器:
import java.util.Iterator;
public class OrderedLinkedList<E extends Comparable<E>> implements Iterable<E>
{
private E first;
private E next;
private E last;
private E current;
private E temp;
private int size;
public OrderedLinkedList()
{
this.first = null;
this.next = null;
this.last = null;
this.current = null;
this.size = 0;
}
public E findOrAdd(E element)
{
E returnVal = null;
Iterator<E> listIter = this.iterator();
if (this.first == null)
{
this.first = element;
this.size++;
}
else
for (int i = 0; i < this.size; i++)
{
if (listIter.next().compareTo(element) == 1 && listIter.hasNext() == false)
{
temp = this.first;
this.first = element;
this.next = temp;
this.size++;
}
else if (listIter.next().compareTo(element) == 1 && listIter.hasNext() == true)
continue;
else if (listIter.next().compareTo(element) == 0)
returnVal = element;
else if (listIter.next().compareTo(element) == -1)
{
temp = this.next;
this.next = element;
}
}
return returnVal;
}
public Iterator<E> iterator()
{
return new OrdListIterator<E>();
}
private class OrdListIterator<E> implements Iterator<E>
{
private E nextNode;
public OrdListIterator()
{
//maybe something needed here
}
public boolean hasNext()
{
return (next != null);
}
public E next()
{
return (E) next;
}
public E first()
{
return (E) first;
}
public void remove()
{
//implement later
}
}
}
我在State
和City
類中具有compareTo()方法,這些方法重寫了通常的方法,但仍以相同的方式起作用。 findOrAdd
在哪里出錯? 我怎么錯了? 我不是在尋找代碼或任何東西的完整更正。 我大約有99%的人確定else
塊下的所有else
都是糟糕的。 我只需要朝着正確的方向努力:在某個地方立足。 我非常感謝任何建議。
我認為,您的問題可能出在您針對每種條件調用listIter.next()
的事實,這可能意味着您在每次檢查時都將迭代器推入。 可能應該將其存儲在循環的開始,然后在比較中使用單個對象...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.