用java 编写9名同学分别写下自己的幸运数字,并按数字从小到大存储到链表中。小明想 知道这9名同学的幸运数字有哪几个,并想删除初始链表中重复的幸运数字。请你设计编程算法,帮助小 明实现这一功能。需要注意的是:若头节点或头节点的下一个节点为空,则返回头节点。
时间: 2023-05-18 21:07:35 浏览: 42
可以使用 HashSet 来存储幸运数字,遍历链表并将幸运数字加入 HashSet 中,如果已经存在则删除该节点。最后将 HashSet 中的数字转化为数组并排序即可。
以下是 Java 代码示例:
```java
public class LuckyNumber {
public static ListNode removeDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
Set<Integer> set = new HashSet<>();
ListNode cur = head;
set.add(cur.val);
while (cur.next != null) {
if (set.contains(cur.next.val)) {
cur.next = cur.next.next;
} else {
set.add(cur.next.val);
cur = cur.next;
}
}
Integer[] nums = set.toArray(new Integer[0]);
Arrays.sort(nums);
ListNode dummy = new ListNode(0);
cur = dummy;
for (int num : nums) {
cur.next = new ListNode(num);
cur = cur.next;
}
return dummy.next;
}
public static void main(String[] args) {
ListNode head = new ListNode(3);
head.next = new ListNode(2);
head.next.next = new ListNode(1);
head.next.next.next = new ListNode(2);
head.next.next.next.next = new ListNode(4);
head.next.next.next.next.next = new ListNode(5);
head.next.next.next.next.next.next = new ListNode(3);
head.next.next.next.next.next.next.next = new ListNode(6);
head.next.next.next.next.next.next.next.next = new ListNode(1);
ListNode result = removeDuplicates(head);
while (result != null) {
System.out.print(result.val + " ");
result = result.next;
}
}
}
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
```
输出结果为:1 2 3 4 5 6