Используя java, напишите два метода min и max, чтобы найти максимальное и минимальное значение в связанном списке, но входной список представляет собой массив целых чисел. - PullRequest
0 голосов
/ 19 марта 2020
  • Я хочу написать два метода min и max, чтобы найти максимальное значение узла и минимальное значение узла в связанном списке.
  • , например, если переменная ab c хранит {1, 78, -9, 42, 0, 14}, затем ab c .min () должна вернуть -9, а ab c .max () должна вернуть 78.
  • Если список пуст, он должен вернуть -1. Выведите возвращаемое значение.

    Пожалуйста, помогите мне в этом, как я могу вычислить максимальные и минимальные значения в связанном списке, введя массив целых чисел

    ```package demo;
    
      public class MaximumMinimum {
    
       class Node{  
            int data;  
            Node next;  
    
        public Node(int data) {  
            this.data = data;  
            this.next = null;  
        }  
    }  
    
    //Represent the head and tail of the singly linked list 
        public Node head = null;  
        public Node tail = null;  
    
       //addNode() will add a new node to the list  
       public void addNode(int data) {  
           //Create a new node  
           Node newNode = new Node(data);  
    
          //Checks if the list is empty  
        if(head == null) {  
            //If list is empty, both head and tail will point to new node  
            head = newNode;  
            tail = newNode;  
        }  
        else {  
            //newNode will be added after tail such that tail's next will point to newNode  
            tail.next = newNode;  
            //newNode will become new tail of the list  
            tail = newNode;  
        }  
    }  
    
    //minNode() will find out the minimum value node in the list  
    public void minNode() {  
        Node current = head;  
        int min;  
    
        if(head == null) {  
            System.out.println("List is empty");  
        }  
        else {  
            //Initializing min with head node data  
            min = head.data;  
    
            while(current != null){  
                 //If current node's data is smaller than min  
                 //Then, replace value of min with current node's data  
                 if(min > current.data) {  
                     min = current.data;  
                 }  
                 current= current.next;  
            }  
            System.out.println("Minimum value node in the list: "+ min);  
        }  
    }  
    
    //maxNode() will find out the maximum value node in the list  
    public void maxNode() {  
        Node current = head;  
        int max;  
    
        if(head == null) {  
            System.out.println("List is empty");  
        }  
        else {  
            //Initializing max with head node data  
            max = head.data;  
    
            while(current != null){  
                 //If current node's data is greater than max  
                 //Then, replace value of max with current node's data  
                 if(max < current.data) {  
                     max = current.data;  
                 }  
                 current = current.next;  
            }  
            System.out.println("Maximum value node in the list: "+ max);  
        }  
    }  
    
    public static void main(String[] args) {
        MaximumMinimum sList = new MaximumMinimum(); 
    
        //Adds data to the list  
        sList.addNode(5);  
        sList.addNode(8);  
        sList.addNode(1);  
        sList.addNode(6);  
    
        //Display the minimum value node in the list  
        sList.minNode();  
    
        *//Display the maximum value node in the list *
        sList.maxNode();  
        }  
      }  ```
    

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Код, который вы дали, выполняется правильно.

Вы также можете использовать

MaximumMinimum sList = new MaximumMinimum(); 
List<Integer> list = new ArrayList<>();
Node head = sList.head;
while(head != null){
    list.add(head.data);
    head= head.next;
}
//no recommended if you want to design your own method    
System.out.println(list);
System.out.println(Collections.max(list));
System.out.println(Collections.min(list));

Для ввода массива целых чисел в

public void stores(int[] array)
{
    for(int element:array)
    {
        this.addNode(element);
    }
}

, тогда, если вы запустите в основном

 int[] elements = {1, 78, -9, 42 , 0, 14};
    sList.stores(elements);
    sList.maxNode(); //78
    sList.minNode();//-9

Также вы можете использовать Arrays.stream(array_name).forEach(e->sList.add(e)), если хотите сделать это java 8 способом.

0 голосов
/ 19 марта 2020

Вы ставите знак «больше» для функции minNode() и знак «меньше» для maxNode().

public void minNode() {  
    Node current = head;  
    int min;  

    if(head == null) {  
        System.out.println("List is empty");  
    }  
    else {  
        //Initializing min with head node data  
        min = head.data;  

        while(current != null){  
             //If current node's data is smaller than min  
             //Then, replace value of min with current node's data  


            // Your error was here:

             min = Math.min(min, current.data); // You can simplify updating min to this.




             current= current.next;  
        }  
        System.out.println("Minimum value node in the list: "+ min);  
    }  
}  

И maxNode() становится таким:

public void maxNode() {  
    Node current = head;  
    int max;  

    if(head == null) {  
        System.out.println("List is empty");  
    }  
    else {  
        //Initializing max with head node data  
        max = head.data;  

        while(current != null){  
             //If current node's data is greater than max  
             //Then, replace value of max with current node's data  


             // Your error was here:

             max = Math.max(max, current.data); // And updating max becomes this.




             current = current.next;  
        }  
        System.out.println("Maximum value node in the list: "+ max);  
    }  
}  
...