Java - Viết chương trình tương tác với một danh sách liên kết chứa các số nguyên dương.
Viết chương trình thực hiện các yêu cầu sau:
- Nhập vào một danh sách liên kết lưu trữ các số nguyên dương và các phần tử cho danh sách này.
- Hiển thị các phần tử lẻ ra màn hình.
- Tìm trong danh sách các phần tử có giá trị chia hết cho 2 và 5.
- In phần tử cuối cùng trong danh sách liên kết.
- Kiểm tra phần tử kế cuối của danh sách là chẵn hay lẻ.
- Đếm xem trong danh sách có bao nhiêu giá trị x, với x được nhập từ bàn phím.
- Xuất ra màn hình giá trị của nút thứ k trong danh sách (k nhập từ bàn phím).
- Xóa phần tử lẻ trong danh sách.
- Xóa phần tử chẵn trong danh sách.
Bài giải
-------------------- ######## --------------------
Bài giải
public static void main(String[] args) { int n; // số phần tử trong danh sách int node; // giá trị của phần tử trong danh sách Scanner scanner = new Scanner(System.in); Iterator<Integer> iterator; // khai báo một danh sách liên kết lưu trữ các số nguyên dương LinkedList<Integer> linkedList = new LinkedList<>(); // khai báo một danh sách liên kết lưu trữ các số lẻ LinkedList<Integer> linkedListLe = new LinkedList<>(); System.out.println("Nhập vào số phần tử của danh sách: "); n = scanner.nextInt(); System.out.println("Nhập giá trị của các phần tử trong danh sách: "); for (int i = 0; i < n; i++) { System.out.print("Nhập phần tử thứ " + i +": "); node = scanner.nextInt(); linkedList.add(node); } // tạo bản sao của linkedList // sử dụng phương thức clone() LinkedList<Integer> linkedListCopy = (LinkedList<Integer>) linkedList.clone(); // HIỂN THỊ CÁC PHẦN TỬ LẺ CÓ TRONG DANH SÁCH RA MÀN HÌNH for (int i = 0; i < n; i++) { // số lẻ là số không chia hết cho 2 // chúng ta sẽ kiểm tra phần tử thứ i trong linkedList // có chia hết chp 2 hay không // nếu có thì thêm phần tử đó vào trong linkedListLe if (linkedList.get(i) % 2 != 0) { linkedListLe.add(linkedList.get(i)); } } System.out.println("\nCác phần tử lẻ có trong danh sách là: "); iterator = linkedListLe.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next() + "\t"); } // TÌM TRONG DANH SÁCH CÁC PHẦN TỬ CÓ GIÁ TRỊ CHIA HẾT CHO 2 VÀ 5 System.out.println("\nCác phần tử chia hết cho 2 và 5 có trong danh sách là: "); for (int i = 0; i < n; i++) { if ((linkedList.get(i) % 2 == 0) && (linkedList.get(i) % 5 == 0)) { System.out.print(linkedList.get(i) + "\t"); } } // IN GIÁ TRỊ PHẦN TỬ CUỐI CÙNG TRONG DANH SÁCH LIÊN KẾT // sử dụng phương thức getLast() System.out.print("\nPhần tử cuối cùng trong danh sách = " + linkedList.getLast() + "\n"); // KIỂM TRA PHẦN TỬ KẾ CUỐI CỦA DANH SÁCH LÀ CHẴN HAY LẺ // phần tử kế cuối của danh sách // là phần tử có chỉ số = size - 2. int ptKeCuoi = linkedList.get(linkedList.size() - 2); if (ptKeCuoi % 2 == 0) { System.out.println("Phần tử kế cuối = " + ptKeCuoi + " là số chẵn"); } else { System.out.println("Phần tử kế cuối = " + ptKeCuoi + " là số lẻ"); } // ĐẾM SỐ PHẦN TỬ CÓ GIÁ TRỊ = x TRONG DANH SÁCH // x được nhập từ bàn phím int soPhanTu = 0; // số phần tử có giá trị = x trong danh sách System.out.print("Nhập giá trị x: "); int x = scanner.nextInt(); for (int i = 0; i < n; i++) { if (linkedList.get(i) == x) { soPhanTu++; } } System.out.println("Số phần tử có giá trị = " + x + " trong danh sách là " + soPhanTu); // XUẤT RA MÀN HÌNH GIÁ TRỊ CỦA PHẦN TỬ THỨ k TRONG DANH SÁCH // k NHẬP TỪ BÀN PHÍM // giá trị của k phải lớn hơn 0 và nhỏ hơn số phần tử tối đa của danh sách System.out.print("Nhập số k: "); int k = scanner.nextInt(); while (k < 0 || k > n - 1) { System.out.print("Nhập lại số k: "); k = scanner.nextInt(); } System.out.print("Giá trị của phần tử thứ " + k + " trong danh sách = " + linkedList.get(k)); // XÓA PHẦN TỬ LẺ TRONG DANH SÁCH // sử dụng phương thức remove() for (int i = 0; i < n; i++) { if (linkedList.get(i) % 2 != 0) { linkedList.remove(linkedList.get(i)); // sau khi xóa phần tử lẻ thì sẽ giảm số phần tử đi 1 // và giảm i đi 1 (quay lại phần tử đứng trước nó) // và duyệt lại danh sách n--; i--; } } System.out.println("\nCác phần tử còn lại trong danh sách " + "sau khi xóa đi các phần tử lẻ: "); iterator = linkedList.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next() + "\t"); } // XÓA PHẦN TỬ CHẴN TRONG DANH SÁCH // tương tự như khi xóa phần tử lẻ int m = linkedListCopy.size(); for (int i = 0; i < m; i++) { if (linkedListCopy.get(i) % 2 == 0) { linkedListCopy.remove(linkedListCopy.get(i)); // sau khi xóa phần tử chẵn thì sẽ giảm số phần tử đi 1 // và giảm i đi 1 (quay lại phần tử đứng trước nó) // và duyệt lại danh sách m--; i--; } } System.out.println("\nCác phần tử còn lại trong danh sách " + "sau khi xóa đi các phần tử chẵn: "); iterator = linkedListCopy.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next() + "\t"); } }
Kết quả sau khi biên dịch chương trình:
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.
Câu hỏi thường gặp liên quan:
- Java - Viết chương trình quản lý danh sách thông tin sinh viên.
- Java - Viết chương trình tính trung bình cộng của các số chẵn có trong 1 danh sách liên kết.
- Java - Viết chương trình đảo ngược các phần tử số nguyên dương có trong 1 danh sách liên kết.
- Java - Viết chương trình tương tác với một danh sách liên kết chứa các số nguyên dương.