已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用
时间: 2024-10-21 17:05:05 浏览: 66
对于给定的两个非降序链表S1和S2,构建它们的交集链表S3可以采用以下步骤:
1. **初始化**:
- 创建一个空链表S3作为结果,并设置一个指针prev用于存储上一个节点。
- 创建两个指针p1和p2,分别指向S1和S2的头部。
2. **遍历链表**:
- 当p1和p2都不为空时,比较它们的值:
- 如果p1的值等于p2的值,说明找到了一个交点,将当前节点添加到S3,并更新prev为当前节点,然后同时移动p1和p2指向下一个节点。
- 如果p1的值小于p2的值,移动p1向前,因为S1的元素已经按顺序较小。
- 否则(p1的值大于p2的值),移动p2向前,因为S2的元素已经按顺序较大。
3. **处理结束标记**:
- 当其中一个指针到达其链表的结尾(-1)时,停止另一个指针的移动,因为它不再有新的元素供比较。
4. **返回结果**:
- 最终,prev所指的就是S3链表的最后一个元素(如果存在交集),如果没有找到交集,则S3会是一个空链表。
以下是伪代码示例:
```
function buildIntersectionLinkedList(S1, S2):
prev = None
p1 = S1.head
p2 = S2.head
while p1 is not None and p2 is not None:
if p1.value == p2.value:
if prev is None:
prev = p1
else:
nextNode = Node(p1.value)
prev.next = nextNode
prev = nextNode
p1 = p1.next
p2 = p2.next
elif p1.value < p2.value:
p1 = p1.next
else:
p2 = p2.next
return prev
```
阅读全文