已排序链表算法的联合

时间:2015-12-19 13:03:51

标签: algorithm linked-list

这是我已经完成的第一部分:

设A和B为排序数组,其中所有元素都是不同的,B的所有元素都是不同的(尽管元素可以出现在A和B中)。设计一个O(n)算法,该算法生成一个排序数组C,其中包含A和B的所有元素而不重复。例如,如果A = [1,2,5,7]且B = [2,5,10],则C = [1,2,5,7,10]。

但是我仍然坚持使用这个部分来处理列表:

对于A和B是链接列表的情况,解决相同的练习。

我的代码:

    Merge(A,B,C)
     i=0;
     j=0;
     k=0;
     while (i < A.length && j < B.length)
          if (A.content <= B.content)
               C.content = A.content
               k = k + 1; i = i + 1

1 个答案:

答案 0 :(得分:0)

您的算法不完整:它不会告诉A.content > B.content时该做什么。该方法几乎与用于合并两个已排序集合的众所周知的算法相同,但是当两个项目相等时,您将推进两个集合。

使用链接列表不会更改算法,因为在这两种情况下,您都会对每个集合中的单个“head”元素进行操作。

merge-lists(list a, list b) -> list c
    while !a.at-end && !b.at-end
        if a.head < b.head
            c.add( a.head )
            a.move-next
        else if a.head > b.head
            c.add( b.head )
            b.move-next
        else // it means that a.head == b.head
            c.add( a.head )
            a.move-next
            b.move-next
        end
    while !a.at-end
        c.add( a.head )
        a.move-next
    while !b.at-end
        c.add( b.head )
        b.move-next