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;
}