zoukankan      html  css  js  c++  java
  • 合并两个有序列表、交叉链表求交点

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

    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
  • 相关阅读:
    石墨文档地址
    Emacs
    HDU
    田忌赛马(贪心
    poj 3040 Allowance (贪心
    cr545
    雕塑 ( 离散化,bfs-floodfill
    求m个不相交子段的和(复杂dp
    doing home work(dp-二进制法枚举
    非常可乐(多参数bfs模拟
  • 原文地址:https://www.cnblogs.com/laosun0204/p/14627374.html
Copyright © 2011-2022 走看看