请实现函数deleteheshu,该函数删除head指向的链表中data值不为素数的结点并返回删除结点后的新链表。例如链表8->7-> 5->3->2->9->6->4->1->0删除不为素数的data值后,得到的链表为:7->5->3->2。
时间: 2024-05-10 17:14:52 浏览: 77
用C++编程实现链表删除某结点
5星 · 资源好评率100%
以下是函数的实现,主要是判断一个数是否为素数,以及遍历链表删除不为素数的节点:
```python
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def deleteheshu(head):
if not head:
return None
while head and not is_prime(head.val):
head = head.next
if not head:
return None
p = head
while p.next:
if not is_prime(p.next.val):
p.next = p.next.next
else:
p = p.next
return head
```
其中,is_prime函数用于判断一个数是否为素数。删除链表中不为素数的节点时,需要注意头节点也有可能不为素数,因此需要在循环中先判断头节点是否为素数。然后从头节点的下一个节点开始遍历链表,如果下一个节点的值不为素数,则将当前节点的next指针指向下下个节点,否则继续遍历下一个节点。最后返回头节点即可。
阅读全文