将元素插入已排序的循环双链表中
Insert element into a sorted Circular Double Linked List
我想插入一个元素到一个排序的循环双链表,下面是我尝试的:
void insertSorted(Node *&head,int x){
Node *temp = new Node();
temp->data = x;
temp->next = temp;
temp->prev = temp;
if(head == NULL){
head = temp;
return;
}
Node *p = head;
Node *q = NULL;
do{
q = p;
p=p->next;
}while(p != head && x>p->data);
if(q == NULL){
temp->next = head;
head->prev = temp;
head = temp;
}
else {
q->next = temp;
if(p!=NULL){
temp->next = p;
p->prev = temp;
}
temp->prev = q;
}
}
代码工作,但问题是第一个元素每次没有排序…例如插入10 9 8 1 2…输出将是10 1 2 8 9,,它应该是1 2 8 9 10
if(q == NULL)
永远不会按照你的代码发生。所以,问题出现在这里。
当第一个节点出现问题时,条件应该是(q == head)
并更新头部。你的代码是正确的
void sortedInsert(int data){
Nodo* ins = (Nodo*)malloc(sizeof(Nodo));
ins->data = data;
Nodo* itr = head;
//case: empty
if (head == NULL) {
ins->next = ins;
ins->prev = ins;
head = ins;
return;
}
//case: at begining
else if (head->data > data){
head->prev->next = ins;
ins->prev = head->prev;
ins->next = head;
head->prev = ins;
head = ins;
return;
}
else {
while (itr->data < data) {
// case: at end of list
if (itr->next == head) {
ins->next = head;
ins->prev = itr;
itr->next = ins;
head->prev = ins;
return;
}
else {
itr = itr->next;
}
}
// case: middle
itr->prev->next = ins;
ins->prev = itr->prev;
itr->prev = ins;
ins->next = itr;
return;
}
}
相关文章:
- 使用std::list创建循环链表
- 遍历链表时的无限循环
- 循环链表:无限循环
- 打印循环链表
- C++循环链表删除,计数从下一个节点开始
- C++ 循环链表的递归基本情况
- 循环链表的内存错误:未分配正在释放的指针
- 返回指向循环链表某个点的指针
- 在 for 循环(链表)中删除两次后,变量不可用
- 尝试拆分循环链表.显示输出但崩溃.在 IDEone 中显示运行时错误
- 如何打印出双向循环链表
- 循环队列和循环链表
- 我想在我的代码中实现一个双重循环链表 - 运行时错误
- 用C++打印出循环链表
- 需要帮助编码迭代器的循环链表在c++
- 获取单个非循环链表中指针后面节点的值
- 删除循环链表中的节点
- 循环链表的循环开始节点
- 如何将链表转换为循环链表
- STL deque是作为循环链表实现的