用python实现如下功能:输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。 链表的值不能重复。 构造过程,例如输入一行数据为: 6 2 1 2 3 2 5 1 4 5 7 2 2 则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示: 1 2 表示为 2->1 链表为2->1 3 2表示为 2->3 链表为2->3->1 5 1表示为 1->5 链表为2->3->1->5 4 5表示为 5->4 链表为2->3->1->5->4 7 2表示为 2->7 链表为2->7->3->1->5->4 最后的链表的顺序为 2 7 3 1 5 4 最后一个参数为2,表示要删掉节点为2的值 删除 结点 2 则结果为 7 3 1 5 4,输出一行 输出删除结点后的序列,每个数后都要加空格
时间: 2023-06-09 20:08:35 浏览: 60
以下是用Python实现删除单向链表中等于给定节点值的节点的代码:
```python
class ListNode:
def __init__(self, val):
self.val = val
self.next = None
def delete_node(head, value):
# 处理头节点为要删除节点的情况
while head and head.val == value:
head = head.next
# 处理无节点的情况
if not head:
return None
# 处理其他节点为要删除节点的情况
prev, curr = head, head.next
while curr:
if curr.val == value:
prev.next = curr.next
else:
prev = curr
curr = curr.next
return head
# 构造链表
n, head_val = map(int, input().split())
nodes = {head_val: ListNode(head_val)}
for _ in range(n-1):
node_val, insert_val = map(int, input().split())
if node_val not in nodes:
nodes[node_val] = ListNode(node_val)
if insert_val not in nodes:
nodes[insert_val] = ListNode(insert_val)
nodes[node_val].next = nodes[insert_val]
# 删除给定节点值的节点
result = delete_node(nodes[head_val], int(input()))
# 输出结果
output = []
while result:
output.append(str(result.val))
result = result.next
print(" ".join(output))
```
注意,为了处理节点值不能重复的要求,我们要用字典来存储每个节点,以节点值为键、节点对象为值。这样在构造链表时,如果遇到已经存在的节点值,就直接使用对应的节点对象;如果遇到新的节点值,就先创建一个新的节点对象并加入字典中。在删除节点时也是一样,用节点值来索引对应的节点对象,从而对节点进行操作。