已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
时间: 2024-03-16 13:20:24 浏览: 82
两个链表求交集(链表基础练习)
我们可以使用双指针法来解决这个问题。具体地,我们可以分别用两个指针p1和p2来遍历两个链表S1和S2,如果p1所指向的节点的值小于p2所指向的节点的值,则将p1往后移动一位;如果p1所指向的节点的值大于p2所指向的节点的值,则将p2往后移动一位;否则,将p1和p2所指向的节点的值加入新链表S3中,并将p1和p2都往后移动一位。
以下是具体实现的代码:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def intersection(s1: ListNode, s2: ListNode) -> ListNode:
dummy = ListNode(0)
tail = dummy
p1, p2 = s1, s2
while p1 and p2:
if p1.val < p2.val:
p1 = p1.next
elif p1.val > p2.val:
p2 = p2.next
else:
tail.next = ListNode(p1.val)
tail = tail.next
p1 = p1.next
p2 = p2.next
return dummy.next
```
时间复杂度为O(m+n),其中m和n分别是两个链表的长度。
阅读全文