对于单链表,交换非相邻单元格可以通过以下操作来描述,假设'=
Y => X->next
X => Y->next
BeforeY => X
BeforeX => Y
但是,该操作不适用于交换相邻记录、创建循环链接,如X-
相邻的记录交换,假设X在Y之前,可以用一组单独的操作来描述:
X => Y->next
Y => X
BeforeX => Y
我似乎无法将这组操作作为前一组或父组的常见子集来解决。
是否有一套统一的、无条件的操作来描述对相邻和非相邻记录都有效的交换?
下面是这两个场景的一些ASCII艺术。
只要X和Y之间至少有一个元素,X就可以出现在列表中Y的前面或后面(因此当X出现在Y之前时,Ax和By可以识别同一个节点)。以前的情况:
Bx X Ax By Y Ay
+----+ +----+ +----+ +----+ +----+ +----+
| | | | | | | | | | | |
-->| |-->| |-->| |--...->| |-->| |-->| |-->
| | | | | | | | | | | |
+----+ +----+ +----+ +----+ +----+ +----+
之后的情况:
Bx X Ax By Y Ay
+------------------------------+
| |
+------------------------------+ |
| | | |
+----+ | +----+ | +----+ +----+ | +----+ | +----+
| |-+ | |-+ | | | | +>| | +>| |
-->| @| | @| | |--...->| @| | @| | |-->
| | +>| | +>| | | |-+ | |-+ | |
+----+ | +----+ | +----+ +----+ | +----+ | +----+
| | | |
+------------------------------+ |
| |
+------------------------------+
标记为@
的4个“下一步”指针已更改。
之前:
Bx->next = X
X->next = Ax
By->next = Y
Y->next = Ay
之后:
Bx->next = Y
Y->next = Ax
By->next = X
X->next = Ay
假设X紧接在Y之前。
Bx X Ax
By Y Ay
+----+ +----+ +----+ +----+
| | | | | | | |
-->| |---->| |---->| |---->| |-->
| | | | | | | |
+----+ +----+ +----+ +----+
之后的情况:
Bx X Ax
By Y Ay
+------------+
| |
+----+ | +----+ | +----+ +----+
| |-+ | | +>| | | |
-->| @| | @| | @| | |-->
| | +>| |-+ | |-+ +>| |
+----+ | +----+ | +----+ | | +----+
| | | |
+-------------------+ |
| |
+------------+
之前:
Bx->next = X
X->next = Ax = Y
By->next = Y
Y->next = Ay
之后:
Bx->next = Y
Y->next = X # Different
By->next = Ay # Different
X->next = Ay
如图所示,指针中的结果值是不同的。这意味着没有一个单一的映射可以同时适用于“不相邻的X和Y”和“相邻的X和Y”情况——指针旋转必须不同。
类MyList的公共方法TwoTogethere()返回True,当且仅当list有两个相等的相邻元素。您可以假定没有列表元素(数据)为空。以下是一些示例:当调用此方法时,列表[a,b,c,d]将返回false。而是一个清单[a、b、b、c]或[a、b、c、d、e、f、f]。方法返回true。编写public方法。您可以使用列表接口引用(字段:data、prev、next)(head、tail)(
这个 邻接列表 模式是一种常见的关系模式,通过该模式,表包含对其自身的外键引用,换言之,是 自指关系 。这是在平面表格中表示分层数据的最常见方式。其他方法包括 嵌套集 ,有时称为“修改的预购”,以及 物化路径 。尽管在评估SQL查询内的流畅性时,修改的预排序很有吸引力,但由于并发性、降低复杂性的原因,邻接列表模型可能是最适合大多数分层存储需求的模式,而且与可以将子树完全加载到应用程序空间的应用程序
问题内容: 我根据员工的工作时间做一些报告。在某些情况下,数据包含两个单独的记录,这实际上是一个时间段。 这是该表的基本版本和一些示例记录: 数据: 在该示例中,最后两个记录在时间上是连续的。我想编写一个查询,该查询结合了所有相邻记录,因此结果集是这样的: 理想情况下,它还应该能够处理两个以上的相邻记录,但这不是必需的。 问题答案: 本文为您的问题提供了许多可能的解决方案 http://www.s
问题内容: 我不知道如何很好地解释这一点,所以请多多包涵。 我试图对彼此相邻的相似行进行分组,如果相同,则基本上忽略第n + 1行。我不确定这在MySQL中是否容易实现。这些行除描述外不共享其他任何属性。如果还有其他不重复的“描述”,我仍然希望将它们返回。 我有一张桌子,上面满是这样的条目: 问题答案: 您可以使用巧妙的技巧来做到这一点。诀窍是计算与特定id 不同 的描述的数量。对于序列中的值,此
问题内容: 我有一个程序,该程序每分钟通过PING检查网络中计算机的状态。每次它将向数据库插入新行,如下所示(我使用的是postgresql) 我希望结果如下 如何获得此输出? 问题答案: 这是差距和孤岛的问题。可以解决如下: dbffile演示 关键是最嵌套的子查询,在该子查询中,我使用两个函数来隔离设备上相同状态的连续出现。一旦有了价值,剩下的就很容易了。 结果