C以排序方式链接列表插入元素

时间:2014-12-04 22:18:27

标签: c sorting insert linked-list

嘿我需要以排序的方式将元素插入到链表中。每个元素都有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;
    }
}

root参数是虚节点(NULL),newbook参数是要插入的新元素。我使用这种方法逐个添加元素。

1 个答案:

答案 0 :(得分:1)

参数根是一个值,它是存储在根中的地址 我想你的代码。

    linkedlist *root = NULL, *newbook;
    while (...) {   // or for( , , )
        newbook = malloc(sizeof(linkedlist));
        // edit newbook
        insertABook(root, newbook);
              :
              :

至少有3种方式 1. insertABook()返回linkedlist *来存储根。

        root = insertABook(root, newbook);

2。将root更改为linkedlist **。我想这就是你想要的答案。

void insertABook(linkedlist **root, linkedlist *newbook) {
    if (*root==NULL) {
        *root=newbook;
    }
    else {  // insert or append
        linkedlist  *next = *root;
            :
            :

呼叫者

        insertABook(&root, newbook);

&amp; root是root的地址。

  1. root是源文件中的全局。

    static linkedlist   *root = NULL;