我无法弄清楚,为什么我的代码插入到排序的双链表中的某些测试用例失败.请让我知道.我不知道测试用例,它们是系统生成的.
Node* SortedInsert(Node *head,int data) { // Complete this function // Do not write the main method. Node * temp = (Node*)malloc(sizeof(Node)); temp->data = data; temp->next = NULL; temp->prev = NULL; if (head == NULL) { head = temp; return head; } if (temp->data <= head->data) { temp->next = head; head->prev = temp; head = temp; return head; } Node *curr = head; while (curr->next!=NULL) { if (temp->data <= curr->data) { curr->prev->next = temp; temp->prev = curr->prev; temp->next = curr; curr->prev = temp; return head; } curr = curr->next; } curr->next = temp; temp->prev = curr; return head; }
谢谢
到达最后一个节点后,您应该再次将其数据与新节点进行比较并相应地插入.
curr->next = temp; temp->prev = curr; return head; }
如果执行到达此部分,则当前curr指向最后一个节点.现在你应该再次比较它的数据,如下所示:
if (temp->data <= curr->data) { // insert before last node curr->prev->next = temp; temp->prev = curr->prev; temp->next = curr; curr->prev = temp; return head; } // else insert at the end. curr->next = temp; temp->prev = curr; return head; }