java请实现函数deleteheshu,该函数删除head指向的链表中data值不为素数的结点并返回删除结点后的新链表。例如链表8->7-> 5->3->2->9->6->4->1->0删除不为素数的data值后,得到的链表为:7->5->3->2。
时间: 2024-05-11 16:18:36 浏览: 66
以下是 Java 实现代码:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
public boolean isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
public ListNode deleteheshu(ListNode head) {
if (head == null) return null;
while (head != null && !isPrime(head.val)) {
head = head.next;
}
ListNode curr = head;
while (curr != null && curr.next != null) {
if (!isPrime(curr.next.val)) {
curr.next = curr.next.next;
} else {
curr = curr.next;
}
}
return head;
}
}
```
首先,我们需要实现一个函数 `isPrime` 来判断一个整数是否为素数。接着,我们遍历链表,删除不为素数的节点。具体实现如下:
1. 如果头结点不是素数,则一直删除头结点,直到找到一个素数为止。
2. 从头结点开始遍历链表,遍历过程中,如果当前节点的下一个节点不是素数,则将当前节点的 next 指向下下个节点,否则继续遍历。
3. 返回新的头结点。
注意:在删除节点时,需要注意空指针异常的情况,因此需要判断当前节点和下一个节点是否为空。
阅读全文