python两个单链表求差集代码
时间: 2024-12-12 07:32:30 浏览: 11
在Python中,你可以使用集合(set)数据结构来计算两个单链表之间的差异。以下是一个简单的实现,假设我们已经有了两个链表节点类`ListNode`:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def get_list_values(head):
values = []
while head:
values.append(head.val)
head = head.next
return values
def find_difference(list1_head, list2_head):
# 将链表元素转换成集合
set1 = set(get_list_values(list1_head))
set2 = set(get_list_values(list2_head))
# 求差集
difference_set = set1 - set2 # 包含list1独有的元素
if list1_head is None or list2_head is None: # 如果其中一个列表为空,则直接返回另一个
return difference_set
diff_list = [ListNode(val) for val in difference_set] # 转换回链表形式
diff_list_head = diff_list[0] if diff_list else None # 初始化差集链表头
current_diff = diff_list_head
for val in difference_set:
node = ListNode(val)
current_diff.next = node
current_diff = current_diff.next
return diff_list_head
# 使用示例:
# 假设list1 和 list2 分别是两个已排序的链表,比如
# list1 = [1, 2, 4, 5]
# list2 = [2, 3, 5, 6]
list1_head = ListNode(1, ListNode(2, ListNode(4, ListNode(5))))
list2_head = ListNode(2, ListNode(3, ListNode(5, ListNode(6))))
diff_head = find_difference(list1_head, list2_head)
```
这个函数首先将每个链表转换成集合,然后使用集合的减法操作找出第一个链表独有的元素。接着,它会遍历差集并构造一个新的链表。
阅读全文