链接字符串列表中的c



我正在尝试这个简单的代码,它要求用户输入字符串。当它接收到输入时,它会尝试将字符串的每个元素复制到链表中的不同位置。一切工作都很好(我认为),但当我打印链表,屏幕上没有显示任何输出。知道为什么会这样吗?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node {
char data;
struct node* next;
};
struct node* head = NULL;
void insert(char);
void print();
void main() {
char str1[20];
int i;
printf("Enter the stringn");
fgets(str1,20,stdin);
int len = strlen(str1);
printf("%dn",len);
for(i=0;i<len;i++) {
insert(str1[i]);
}
print();
}
void insert(char str) {
struct node* temp = (struct node*)malloc(sizeof(struct node));
struct node* temp1 = head;
        while(temp1!=NULL) {
            temp1 = temp1->next;
        }
    temp->data = str;
    temp1 = temp;
}
void print() {
struct node *temp;
temp = head;
while(temp!=NULL) {
    printf("%c ",temp->data);
    temp = temp->next;
}
}

您永远不会将head设置为任何值,它将始终是NULL。因此,您不是在创建一个列表,而是一组未链接的浮动节点。

另外,不要强制转换malloc 的结果。

在另一个注意事项,不需要通过整个列表为每次插入-你可以保持一个tail指针与头部,所以添加到结束没有一个循环。

void insert(char str) {
    struct node* temp = (struct node*)malloc(sizeof(struct node));
    temp->data = str;
    temp->next = NULL;
    if(head){//head != NULL
        struct node* temp1 = head;
        while(temp1->next != NULL) {//search last element
            temp1 = temp1->next;
        }
        temp1->next = temp;//insert new node
    } else {
        head = temp;//if head == NULL then replace with new node
    }
}

相关内容

  • 没有找到相关文章

最新更新