我有以下代码使用Swift反转双链表。但是,我对swap
函数是否将currentNode
与邻近节点进行交换感到困惑?或者它是否交换了两个相邻的节点?
实施例: 链接列表值表示: 1 - > 2 - > 3
第一次运行时是否交换1和2?还是交换1和3?第一次运行时会交换哪些值?
public func reverse() {
var node = head
while let currentNode = node {
node = currentNode.next
swap(¤tNode.next, ¤tNode.previous)
head = currentNode
}
}
答案 0 :(得分:1)
您可以在循环内添加print语句(使用换行符)以帮助您进行调试,或使用调试器添加断点。
我们可以一起完成这个功能,手动调试以提高理解力:
首先运行:
public func reverse() {
var node = head
while let currentNode = node {
node = currentNode.next
swap(¤tNode.next, ¤tNode.previous)
head = currentNode
}
}
在此功能中:
node
分配给head
。他们都指向具有值1
node
存在(确实如此),则将currentNode
分配给node
,然后分配currentNode = node
,因此currentNode = 1 and node = 1 and head = 1
(所有相同的节点)while
中):你说,node = currentNode.next
。现在node
是2
currentNode = 1
仍然。 currentNode.previous
为nil
,currentNode.next
为2
。2 -> nil (->) 3
(我把 - >放在parens中,因为它实际上并没有#34;指向"因为它是#3无)。 请注意,当我说=
或 时,就像在node = 2
中一样,我的意思是" node
变量指的是使用值为2"
所以我们实际上交换了第一个节点的前一个节点和下一个节点。
答案 1 :(得分:0)