【发布时间】:2014-03-13 02:57:56
【问题描述】:
我有一个用于交换 2 个节点的函数:
void swap(Node<T>* a, Node<T>* b) {
if(a->m_prev)
a->m_prev->m_next = b;
if(b->m_prev)
b->m_prev->m_next = a;
if(a->m_next)
a->m_next->m_prev = b;
if(b->m_next)
b->m_next->m_prev = a;
Node<T>* temp;
temp = a->m_prev;
a->m_prev = b->m_prev;
b->m_prev = temp;
temp = a->m_next;
a->m_next = b->m_next;
b->m_next = temp;
}
但是,当与我的递归选择排序一起使用时:
void selectionSort(Node<T>* head) {
if(next(head) == NULL) {
return;
}
Node<T>* minimum = min(head);
swap(head,minimum);
selectionSort(minimum->m_next);
}
在排序进行到一半时,它将我的节点的下一个指针之一设置为 NULL,然后当我打印我的列表时,它被正确排序为该值,但其余部分丢失,因为指针被错误地设置为空。
我检查并:
我的初始列表是正确的,没有错误连接的节点。
我的交换函数只调用非空有效节点。
所以我责怪交换功能。有什么问题吗?
【问题讨论】:
标签: c++