EILINKED - Linked List

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

Đoạn code java phía dưới là thiết kế chi tiết của lớp LinkedList, và phương thức main để kiểm tra. Các em hãy hoàn thiện lớp này với gợi ý sau:

LinkedList<T>: Là kiểu dữ liệu Generic, cho phép lưu trữ tập hợp các phần tử kiểu Number. LinkedList<T>, như tên đã thể hiện, lưu trữ dữ liệu ở dạng danh sách liên kết đơn (Tài liệu tham khảo, Chapter 3), hỗ trợ các methods như trong file thiết kế.

Input

  • Dòng đầu tiên gồm hai số ~n~ ~(0 \leq n \leq 2 \times 10^5)~ và ~m~ ~(0 \leq m \leq 100)~: số lượng phần tử ban đầu của danh sách, và số lượng câu lệnh (command)
  • Dòng tiếp theo chứa ~n~ phần tử ban đầu của danh sách
  • ~m~ dòng tiếp theo chứa các câu lệnh theo dạng: "command [parameters]". Command là tên method, parameters là tham số tương ứng với file thiết kế

Output

  • Với các command có trả ra giá trị (sum, average, getAt, size, firstIndexOf, lastIndexOf), xuất kết quả vào standard output.

Sample Input

10 6 
2 4 -4 -3 -2 -3 3 1 -5 -3 
getAt 0
getAt 8
firstIndexOf 1
lastIndexOf 1
sum
average

Sample Output

2
-5
7
7
-10.0
-1.0

Notes

Có 19 testcases, 50% là testcases đơn giản chỉ kiểm tra các tác vụ riêng lẻ. Các em có thể sumit từng phần để kiểm tra xem đúng được những tác vụ nào:

  • Testcase 1, 18: Kiểm tra tác vụ getAt
  • Testcase 2: Kiểm tra tác vụ firstIndexOf
  • Testcase 3: Kiểm tra tác vụ lastIndexOf
  • Testcase 4: Kiểm tra tác vụ sum, average
  • Testcase 5: Kiểm tra tác vụ getAt, firstIndexOf, lastIndexOf, sum, average, size (CHECKS)
  • Testcase 6: Kiểm tra tác vụ removeAt và CHECKS
  • Testcase 7, 19: Kiểm tra tác vụ insertAt và CHECKS
  • Testcase 8: Kiểm tra tác vụ removeFirst và CHECKS
  • Testcase 9-11: Kết hợp 2/3 tác vụ trên và CHECKS
  • Testcase 12-14: Kiểm tra với danh sách ít nhất 1000 phần tử
  • Testcase 15-17: Kiểm tra với danh sách ít nhất 100000 phần tử! Lưu ý vấn đề thời gian thực thi
Program
import java.util.Scanner;

class LinkedList<T extends Number> {

  static private class LinkedNode<U extends Number> {
    U number;
    LinkedNode<U> next;

    public LinkedNode(U number) {
      this.number = number;
    }
  }

  LinkedNode<T> head = null;

  private int compare(T n1, T n2) {
    long l1 = n1.longValue();
    long l2 = n2.longValue();
    if (l1 != l2) {
      return (l1 < l2 ? -1 : 1);
    }
    return Double.compare(n1.doubleValue(), n2.doubleValue());
  }

  public int size() {
    // Your code here
    return 0;
  }

  public void add(T number) {
    LinkedNode<T> newNode = new LinkedNode<T>(number);
    // Your code here
  }

  /**
   * @return -1 if number is not in list
   */
  public int firstIndexOf(T number) {
    // Your code here
    return -1;
  }

  /**
   * @return -1 if number is not in list
   */
  public int lastIndexOf(T number) {
    // Your code here
    return -1;
  }


  /**
   * Remove first occurence of number
   */
  public void removeFirst(T number) {
    // Your code here
  }

  public void removeAt(int index) {
    // Your code here
  }

  public void insertAt(int index, T number) {
    // Your code here
  }

  /**
   * @return null if index is out of range
   */
  public T getAt(int index) {
    // Your code here
    return null;
  }

  public double sum() {
    // Your code here
    return 0;
  }

  public double average() {
    // Your code here
    return 0;
  }

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    LinkedList<Integer> linkedList = new LinkedList<Integer>();
    // You code here
  }
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.