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:

Nguồn: freetuts.net