下面您将找到我的代码,它在第一个节点和最后一个节点之间的任何位置正确插入,但是当我尝试在第一个节点之前或最后一个节点之后插入时,它失败了。我目前无法弄清楚,想知道是否有人可以提供帮助。谢谢!
当我说它不起作用时,它不会失败,它只是不会在第一个节点或最后一个节点之后插入。没有抛出错误消息。我认为这可能是主体的问题,与插入功能的问题
主体(部分):
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/