从头开始实现ADT链表



我有一个类项目,我必须从头开始构建一个基于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区块下的一切都非常糟糕。我只需要朝着正确的方向努力:找个地方站稳脚跟。如果有任何建议,我将不胜感激。

我认为您的问题可能在于您为每个条件调用listIter.next()这一事实,这可能意味着您在每次检查时都在推动迭代器。可能您应该将其存储在循环的开头,然后在比较中使用单个对象。。。

相关内容

  • 没有找到相关文章

最新更新