1.3.47

1.3.47 #

解答 #

这里用的都是链式结构,头尾相接即可。

代码 #

Queue #

/// <summary>
/// 在当前队列之后附加一个队列。
/// </summary>
/// <param name="q1">需要被附加的队列。</param>
/// <param name="q2">需要附加的队列(将被删除)。</param>
public static Queue<Item> Catenation(Queue<Item> q1, Queue<Item> q2)
{
    if (q1.IsEmpty())
    {
        q1.first = q2.first;
        q1.last = q2.last;
        q1.count = q2.count;
    }
    else
    {
        q1.last.next = q2.first;
        q1.last = q2.last;
        q1.count += q2.count;
    }

    q2 = null;
    return q1;
}

Stack #

/// <summary>
/// 将两个栈连接。
/// </summary>
/// <param name="s1">第一个栈。</param>
/// <param name="s2">第二个栈(将被删除)。</param>
/// <returns></returns>
public static Stack<Item> Catenation(Stack<Item> s1, Stack<Item> s2)
{
    if (s1.IsEmpty())
    {
        s1.first = s2.first;
        s1.count = s2.count;
    }
    else
    {
        Node<Item> last = s1.first;
        while (last.next != null)
        {
            last = last.next;
        }
        last.next = s2.first;
        s1.count += s2.count;
    }
    s2 = null;
    return s1;
}

Steque #

/// <summary>
/// 将两个 Steque 连接。
/// </summary>
/// <param name="s1">第一个 Steque </param>
/// <param name="s2">第二个 Steque (将被删除)</param>
/// <returns></returns>
public static Steque<Item> Catenation(Steque<Item> s1, Steque<Item> s2)
{
    if (s1.IsEmpty())
    {
        s1.first = s2.first;
        s1.last = s2.last;
        s1.count = s2.count;
    }
    else
    {
        s1.last.next = s2.first;
        s1.count += s2.count;
    }
    s2 = null;
    return s1;
}