合并两个有序列表、交叉链表求交点

思路:
定义一个新的空列表
比较两个列表的首个元素
小的就插入到新列表里
把已经插入新列表的元素从旧列表删除
直到两个旧列表有一个为空
再把旧列表加到新列表后面

def loop_merge_sort(list1, list2):
tmp = []
while len(list1) > 0 and len(list2) > 0:
if list1[0] < list2[0]:
tmp.append(list1[0])
del list1[0]
elif list1[0] == list2[0]:
tmp.append(list1[0])
tmp.append(list2[0])
del list1[0]
del list2[0]
else:
tmp.append(list2[0])
del list2[0]
tmp.extend(list1)
tmp.extend(list2)
return tmp


a = [1, 2, 3, 7]
b = [3, 4, 5]
print(loop_merge_sort(a, b))

其实思想可以按照从尾开始比较两个链表,如果相交,则从尾开始必然一致,只要从尾开始比较,直至不一致的地方即为交叉点,如图所示:

# 使用a,b两个list来模拟链表,可以看出交叉点是7这个节点

a = [1, 2, 3, 7, 9, 1, 5]
b = [4, 5, 7, 9, 1, 5]
for i in range(1, min(len(a), len(b))):
if i == 1 and (a[-1] != b[-1]):
print("No")
break
else:
if a[-i] != b[-i]:
print("交叉节点:", a[-i+1])
break
else:
pass
posted @ 2021-04-07 13:56  laosun0204  阅读(118)  评论(0编辑  收藏  举报