嘿,我需要以排序的方式将元素插入链表中。每个元素都有 isbn,我需要对链表进行排序。它有点工作,因为它在头部插入了最小的元素,但仅此而已,其余的元素似乎以随机方式排序。这是我的代码
void insertABook(linkedlist *root, linkedlist *newbook)
{
if ((root==NULL) && (root->ptr==NULL))
{
root->ptr=newbook;
}
else
{
linkedlist *next = root;
while((next->ptr != NULL) && (next->isbn < newbook->isbn))
{
next = next->ptr;
}
newbook->ptr=next->ptr;
next->ptr=newbook;
}
}
根参数是虚拟节点(NULL),新书参数是要插入的新元素。我使用此方法一一添加元素。
参数根是一个值,它是存储在根中的地址。
我猜你的代码。
linkedlist *root = NULL, *newbook;
while (...) { // or for( , , )
newbook = malloc(sizeof(linkedlist));
// edit newbook
insertABook(root, newbook);
:
:
至少有3种方法。
1. 插入 ABook() 返回 linkedlist* 来存储根目录。
root = insertABook(root, newbook);
2. 将根目录更改为链表**。我想这就是你想要的答案。
void insertABook(linkedlist **root, linkedlist *newbook) {
if (*root==NULL) {
*root=newbook;
}
else { // insert or append
linkedlist *next = *root;
:
:
访客
insertABook(&root, newbook);
&root 是 root 的地址。
根在源文件中是全局的。
static linkedlist *root = NULL;