21:按大小顺序建立单链表并按要求删除节点
总时间限制:
1000ms
内存限制:
32767kB
描述
输入的每一行是姓名和年龄。读入每个人的信息,按年龄从小到大建立一个单链表。
按示例格式输出这个单链表。
删除链表中所有年龄是偶数的节点,按示例格式输出剩下的所有节点。
要求:必须删除节点,不能只是跳过节点不输出。
输入
输入的每一行是以空格隔开的姓名和年龄。姓名少于20个字节。
输入以 END 结束。
输出
按示例格式输出这个单链表。每个人得信息输出在一对小括号之间,姓名和年龄以一个空格隔开,小括号后没有空格。
删除链表中所有年龄是偶数的节点,按示例格式输出剩下的所有节点。
样例输入
Emma 16
Emily 12
Madison 21
Isabella 22
Ava 15
END
样例输出
(Emily 12)(Ava 15)(Emma 16)(Madison 21)(Isabella 22)
(Ava 15)(Madison 21)
提示
1、必须删除节点,不能只是跳过节点不输出。
2、删除节点时不要忘了释放被删除节点的空间。
3、程序结束时不要忘了销毁链表,释放所有节点的空间。
实现代码如下:
import java.util.ArrayList; import java.util.Comparator; import java.util.Scanner; /** * @author baikunlong * @date 2020/6/22 19:10 */ public class Main { public static void main(String[] args) { ArrayList<User> users = new ArrayList<>(); Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String s = scanner.nextLine(); if (s.equals("END")) { break; } else { String[] strings = s.split(" "); users.add(new User(strings[0], Integer.parseInt(strings[1]))); } } users.sort(Comparator.comparingInt(o -> o.age)); for (User u : users) { System.out.print(u.toString()); } for (int i = 0; i < users.size(); i++) { if(users.get(i).age%2==0){ users.remove(i); i--; } } System.out.println(); for (User u : users) { System.out.print(u.toString()); } users.clear(); } static class User { String name; int age; public User(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "(" + name + " " + age + ")"; } } }