各依次输入递增有序若干个不超过100的整数,分别建立两个递增有序单链表,分别表示集合A和集合B。设计算法求出两个集合A和B 的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并存放于A链表中。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。然后输出求的差集的单链表。测试数据保证结果链表至少存在一个元素。 输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先在第一行输入数据个数n及n个依次递增有序的不超过100的整数,再在第二行输入数据个数m及m个依次递增有序的不超过100的整数。 输出格式: 对于每组测试,输出A与B的差集的单链表,每两个数据之间留一个空格。 输入样例: 2 11 10 14 23 25 26 31 34 42 51 65 90 10 10 41 42 46 51 58 59 60 68 97 5 1 2 3 4 5 3 3 4 5 输出样例: 14 23 25 26 31 34 65 90 1 2
时间: 2024-02-18 09:06:12 浏览: 31
设A和B是两个单链表,其表中元素递增有序
5星 · 资源好评率100%
以下是Python3的代码实现,使用了双指针法进行遍历和删除操作,时间复杂度为O(n),空间复杂度为O(1)。
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def create_list(n: int) -> ListNode:
head = ListNode(0)
p = head
for _ in range(n):
x = int(input())
p.next = ListNode(x)
p = p.next
return head.next
def print_list(head: ListNode) -> None:
p = head
while p:
print(p.val, end=' ')
p = p.next
print()
def difference(A: ListNode, B: ListNode) -> ListNode:
dummy = ListNode(0)
dummy.next = A
p = dummy
q = B
while p.next and q:
if p.next.val < q.val:
p = p.next
elif p.next.val == q.val:
temp = p.next
p.next = p.next.next
del temp
q = q.next
else:
q = q.next
return dummy.next
T = int(input())
for _ in range(T):
n = int(input())
A = create_list(n)
m = int(input())
B = create_list(m)
diff = difference(A, B)
print_list(diff)
```
阅读全文