我有一个用于交换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的指针,然后当我打印我的列表时,它将正确地排序为该值,但其余部分因为指针被错误地设置为NULL而丢失。
我检查和:
我最初的名单是正确的,并没有正确连接的节点。
我的交换功能只能用非空的有效节点调用。
所以我怪责交换功能。它有什么问题吗?
10我能做些什么来解决这个问题?我不知道如何。 – jmasterx
@Milo我在回答中增加了一些附注。 – user3386109