C插入链表,第一个和最后一个节点的问题

标签 c linked-list insert

下面您将找到我的代码,它在第一个节点和最后一个节点之间的任何位置正确插入,但是当我尝试在第一个节点之前或最后一个节点之后插入时,它失败了。我目前无法弄清楚,想知道是否有人可以提供帮助。谢谢!

当我说它不起作用时,它不会失败,它只是不会在第一个节点或最后一个节点之后插入。没有抛出错误消息。我认为这可能是主体的问题,与插入功能的问题

主体(部分):

else{
        while (fgets(buff, BUFF_SIZE, stdin) != NULL){

            if (strlen(buff) == 1)
                break;

            buff[strlen(buff) - 1] = '\0';
            insertPnt = 1;

            // set curr = root node
            curr = root;
            while (curr){
                if (strcmp(buff, curr->stringDat) > 0){
                    insertPnt++;
                    curr = curr->next;
                }
                else{
                    insert(buff, insertPnt, root);
                    printf("STRING: %-20s  POSITION: %d\n", buff, insertPnt);

                    break;
                }
            }
            // clear buffer
            for (i = 0; i < BUFF_SIZE; i++) {
                buff[i] = 0;
            }
        }
    }

插入函数:

void insert(char* stringArg, int position, NODE* rootNodeArg){
    int i, strDatLen;

    /* Declaring node */
    NODE* temp = (NODE*)malloc(sizeof(NODE));

    strDatLen = strlen(stringArg);
    temp->stringDat = malloc(sizeof(char)*strDatLen);

    strcpy(temp->stringDat,stringArg);
    temp->next = NULL;



    /* if node insertion at first point */
    if (position == 1)
    {
        temp->next = rootNodeArg;
        rootNodeArg = temp;
        return;
    }

    /* Adding & Adjusting node links*/
    NODE* traverse = rootNodeArg;
    for (i = 0; i<position - 2; i++)
    {
        traverse = traverse->next;
    }
    temp->next = traverse->next;
    traverse->next = temp;

}

最佳答案

字符串大小有一个大问题

temp->stringDat = malloc(sizeof(char)*strDatLen);

必须是

temp->stringDat = malloc( strDatLen+1);

为空终止符创建空间。

正如您在 the man 上看到的那样strlen 返回 c 字符串中的字符数,并计算空终止符的字节数。

关于C插入链表,第一个和最后一个节点的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40605454/

相关文章:

c - 在保持松散耦合的同时持久化对象

转换数据包以获取 IP header

java - Java 中自定义链表的节点中的多种不同数据类型

c - 链表中节点的地址在c中自动更改

mysql - MySQL插入时出现语法错误

sql - TSQL 如果不存在则插入

php - INSERT FROM 2 tables 复制表 1 中 1 列中的所有行,仅复制表 3 中 1 列中的最后一行

c - 具有段错误的快速排序程序

c - 在 C 中查找字符串中的子字符串

c++ - 我的循环链表中的 remove 方法是否定义明确?