最后是C链表插入节点

前端之家收集整理的这篇文章主要介绍了最后是C链表插入节点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在C中的链表的插入方法遇到了一些麻烦.它似乎只在列表的开头添加.我做的任何其他插入失败.而这个CodeBlocks调试器很难理解我仍然没有得到它.它永远不会给我价值,只有内存中的地址.无论如何这是我的功能.你有没有看到它失败的原因?
/* function to add a new node at the end of the list */
int addNodeBottom(int val,node *head){

    //create new node
    node *newNode = (node*)malloc(sizeof(node));

    if(newNode == NULL){
        fprintf(stderr,"Unable to allocate memory for new node\n");
        exit(-1);
    }

    newNode->value = val;

    //check for first insertion
    if(head->next == NULL){
        head->next = newNode;
        printf("added at beginning\n");
    }

    else
    {
        //else loop through the list and find the last
        //node,insert next to it
        node *current = head;
        while(current->next != NULL)
        {
            if(current->next == NULL)
            {
                current->next = newNode;
                printf("added later\n");
            }
            current = current->next;
        }
    }
    return 0;
}

然后在main中,仅添加了929.

//testing addNodeBottom function
    addNodeBottom(929,head);
    addNodeBottom(98,head);
    addNodeBottom(122,head);
    addNodeBottom(11,head);
    addNodeBottom(1034,head);

解决方法

这段代码可行. samplebias的答案几乎是正确的,但您需要进行第三次更改:
int addNodeBottom(int val,"Unable to allocate memory for new node\n");
        exit(-1);
    }

    newNode->value = val;
    newNode->next = NULL;  // Change 1

    //check for first insertion
    if(head->next == NULL){
        head->next = newNode;
        printf("added at beginning\n");
    }

    else
    {
        //else loop through the list and find the last
        //node,insert next to it
        node *current = head;
        while (true) { // Change 2
            if(current->next == NULL)
            {
                current->next = newNode;
                printf("added later\n");
                break; // Change 3
            }
            current = current->next;
        };
    }
    return 0;
}

更改1:newNode-> next必须设置为NULL,因此我们不会在列表末尾插入无效指针.

改变2/3:循环变为无限循环,随着休息跳出;当我们找到最后一个元素.注意while(current-> next!= NULL)如果之前(current-> next == NULL)之前是如何矛盾的.

编辑:关于while循环,这种方式更好:

node *current = head;
  while (current->next != NULL) {
    current = current->next;
  }
  current->next = newNode;
  printf("added later\n");

猜你在找的C&C++相关文章