swap method
void
swap(
- N node1,
- N node2
交换两个节点的位置
Implementation
void swap(N node1, N node2) {
assert(
node1.mounted && node2.mounted,
'ElLinkedList Error: swap 交换的两个节点必须都处于挂载状态!\n'
'$node1\n'
'$node2',
);
assert(
node1.list == this && node2.list == this,
'ElLinkedList Error: swap 交换的两个节点必须指向同一个链表对象!\n'
'$node1\n'
'$node2',
);
assert(node1 != node2, 'ElLinkedList Error: swap 交换的两个节点不能相同!');
if (node1.next == node2) {
assert(node2.prev == node1);
node1._next = node2.next;
node2._prev = node1.prev;
node1._prev = node2;
node2._next = node1;
} else if (node1.prev == node2) {
assert(node2.next == node1);
node1._prev = node2.prev;
node2._next = node1.next;
node1._next = node2;
node2._prev = node1;
} else {
final prev1 = node1.prev;
final next1 = node1.next;
final prev2 = node2.prev;
final next2 = node2.next;
node1._prev = prev2;
node1._next = next2;
node2._prev = prev1;
node2._next = next1;
}
if (node1.prev == null) {
_first = node1;
} else {
node1.prev!._next = node1;
}
if (node2.prev == null) {
_first = node2;
} else {
node2.prev!._next = node2;
}
if (node1.next == null) {
_last = node1;
} else {
node1.next!._prev = node1;
}
if (node2.next == null) {
_last = node2;
} else {
node2.next!._prev = node2;
}
}