簡體   English   中英

從頭開始實現ADT鏈表

[英]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
        }
    }
}

我在StateCity類中具有compareTo()方法,這些方法重寫了通常的方法,但仍以相同的方式起作用。 findOrAdd在哪里出錯? 怎么錯了? 我不是在尋找代碼或任何東西的完整更正。 我大約有99%的人確定else塊下的所有else都是糟糕的。 我只需要朝着正確的方向努力:在某個地方立足。 我非常感謝任何建議。

我認為,您的問題可能出在您針對每種條件調用listIter.next()的事實,這可能意味着您在每次檢查時都將迭代器推入。 可能應該將其存儲在循環的開始,然后在比較中使用單個對象...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM