具有未预定义类型的变量的链表

时间:2018-09-14 04:49:20

标签: java singly-linked-list

我的链表使用的变量不是预定义的,但我今天才学会使用它们。我已经设置了使用简单整数的列表,但是我意识到我无法以相同的方式比较变量,因为它们没有定义为整数,因此我在试图比较整数值的if语句中收到语法错误从链接的列表节点中查找列表中最大和最小的对象。

我已将if语句标记为错误。请告诉我是否需要更多代码或信息。

package lab01Pkg;

public class LinkedList <T> //<T> is defining the type of node we are creating
{
    private int size;
    private Node<T> head;
    private Node<T> tail;

    public LinkedList()
    {
        size = 0;
        head = null;
        tail = null;
    }

    public void addToFront( T theData ) //Must pass in the type of variable the list knows how to hold.
    {
        Node<T> tempNode = head;
        head = new Node<T>( theData, tempNode );
        size++;
    }

    public void addLast( T theData )
    {
        if ( isEmpty() )
        {
            addToFront(theData);
        }
        else
        {
            Node<T> tempNode = head;
            while ( tempNode.getLink() != null )
            {
                tempNode = tempNode.getLink();
            }
            Node<T> newNode = new Node<T>( theData, null );
            tempNode.setLink(newNode);
            size++;
        }
    }

    public T min()
    {
        if (size == 0)
        {
            return null;
        }
        Node<T> tempNode = head;
        T valueHold = tempNode.getData();
        while ( tempNode.getLink() != null )
        {
            **if (tempNode.getData() < valueHold)** //Error Here
            {
                valueHold = tempNode.getData();
            }
            tempNode = tempNode.getLink();
        }
        return valueHold;
    }

    public T max()
    {
        if (size == 0)
        {
            return null;
        }
        Node<T> tempNode = head;
        T valueHold = tempNode.getData();
        while ( tempNode.getLink() != null )
        {
            **if (tempNode.getData() > valueHold)** //Error here
            {
                valueHold = tempNode.getData();
            }
            tempNode = tempNode.getLink();
        }
        return valueHold;
    }

    public void removeLast()
    {
        Node<T> tempNode = head;
        while (tempNode.getLink() != null)
        {
            tempNode = tempNode.getLink();
        }
        tempNode = null;
    }

    public boolean isEmpty() //Returns true or false based on if list is empty or not.
    {
        return size == 0;
    }

    public String toString()
    {
        Node<T> tempNode = head;
        String theResult = "";
        while ( tempNode != null)
        {
            theResult = theResult + tempNode.getData().toString();
            tempNode = tempNode.getLink();
        }
        return theResult;
    }

}

1 个答案:

答案 0 :(得分:2)

要实现所需的功能,您需要使用-D界面。阅读this article可以在Comparable界面上找到想法。

然后,您需要使类定义具有实现Comparable接口的泛型类型。

Comparable

并且您需要确保计划添加到此列表的对象正在实现public class LinkedList <T extends Comparable<T>> { ... 接口。通常,像Integer,Long这样的java内置类都实现了此功能。如果您使用的是自定义对象,请确保在那些类中实现该接口。

然后,在if条件中使用Comparable方法代替<>标记。例如:

compareTo

我刚刚概述了您需要做的事情。希望你有主意。阅读this,以进一步了解if (tempNode.getData().compareTo(valueHold) > 0) // tempNode is larger 与泛型的用法。