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



您将在下面发现我的代码,它在第一个和最后一个节点之间的任何地方插入正确,但是当我尝试在第一个节点之前插入时,或者在最后一个节点之后,它失败了。我现在想不明白,不知道有没有人可以帮忙。谢谢你!

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

主体(部分):

else{
        while (fgets(buff, BUFF_SIZE, stdin) != NULL){
            if (strlen(buff) == 1)
                break;
            buff[strlen(buff) - 1] = '';
            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: %dn", 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);

为空终止符创建空间。

正如您在man strlen上看到的那样,返回c-string中的字符数,而不计算null终止符的字节。

相关内容

  • 没有找到相关文章

最新更新