Java中链接列表中最小的元素

时间:2014-05-22 18:37:58

标签: java linked-list

我正在尝试创建10个无序整数的链表,输出列表,然后找到列表中的最小元素并输出它。这就是我所拥有的。它查找并输出一个元素,但不是列表中的最小元素。请帮忙。

import java.util.LinkedList;
import java.util.Random;

public class intergers
{

    public static void main(String[] args)
    {
        LinkedList <Integer> integers = new LinkedList<Integer>();

        //Generates an unordered list of ten integers.
        Random Doge = new Random();


        //Using a for loop.

        for(int count =0; count<10; count++)
        {
            int integer = Doge.nextInt(10);
            integers.add(integer);
        }
        if(integers.getLast() !=0)
        {
            integers.removeLast();
            integers.add(0);
        }

        System.out.println(integers); //Prints out that list.
        int Oedipus; 
        for(Oedipus =0; Oedipus <integers.size()-1; Oedipus++)
        {
            if(integers.get(Oedipus) < integers.get(Oedipus++))
            {
                //int smallest = integers.get(Oedipus);
                int smallest = integers.get(Oedipus);
            }

            if(integers.get(Oedipus) > integers.get(Oedipus++))
            {
                //int smallest = integers.get(Oedipus);
                //System.out.println("Smallest " + integers.get(Oedipus));
            }
            int smallest = integers.size();
        }
        int smallest = integers.get(Oedipus);
        System.out.println("The smallest element is: " + smallest);

    }
}

5 个答案:

答案 0 :(得分:3)

您是否尝试过使用Collections.min()方法?

答案 1 :(得分:1)

这一行

System.out.println(integers); //Prints out that list.

没有按照评论所说的那样做。添加循环以浏览项目,并单独打印每个项目以查看列表中的内容。

smallest有关的行,例如这一个

int smallest = integers.get(Oedipus);

不正确有两个原因:它们每次在嵌套范围内声明一个新的smallest,并且它们不会初始化smallest开始。

要解决此问题,请在循环外部声明smallest,使用列表的初始元素对其进行初始化,然后从1开始迭代元素,并将其与smallest进行比较。或者,存储{em>索引,而不是smallest中最小元素的值。如果您发现的元素小于Oedipus处的元素,请将其初始化为零,并将其设置为integers.get(smallest)

答案 2 :(得分:0)

您只需遍历列表并尝试找到最小元素。

int minInt = Integer.MAX_VALUE
for(int i = 0; i < Integers.size(), ++i){
    if(Integers.get(i) < minInt)
        minInt = Integers.get(i)
}

编辑:我存储值而不是索引的原因是因为链接列表的随机访问速度很慢。如果它是一个数组,那么随机访问会很快。

答案 3 :(得分:0)

除了删除smallest的不必要声明之外,每次使用smallest代码进行迭代时,您还会将int smallest = integers.size();重置为LinkedList的大小。您应该将其与最后的代码一起删除:

int smallest = integers.get(Oedipus);
System.out.println("The smallest element is: " + smallest);

所有这一切都是将smallest重新定义为最后一个元素。

答案 4 :(得分:0)

你的做法有些奇怪。您还应该考虑变量的范围。最小的&#34;您通过代码获得的变量是不同的。

分析以下重新定义的功能

public static void main(String[] args) {
    // TODO code application logic here
    LinkedList <Integer> integers = new LinkedList<Integer>();

    //Generates an unordered list of ten integers.
    Random Doge = new Random();

    //Using a for loop.
    for(int count =0; count<10; count++)
    {
        int integer = Doge.nextInt(10);
        integers.add(integer);
    }

    int smallest = integers.get(0);
    System.out.println(integers); //Prints out that list.
    for( int Oedipus =1; Oedipus <integers.size()-1; Oedipus++)
    {
        if(integers.get(Oedipus) < smallest )
        {
            //int smallest = integers.get(Oedipus);
            smallest = integers.get(Oedipus);
        }
    }
    System.out.println("The smallest element is: " + smallest);     
}