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:

Trở thành Android Developer chuyên nghiệp với 30h học
Bạn muốn trở thành một nhà phát triển mobile app trên nền tảng Android? Vậy thì đây là khóa học rất phù hợp với bạn, chi phí rẻ, học online tại nhà.
XEM NGAY

Nguồn: freetuts.net