我想为我的链表添加一个插入方法,该插入方法将插入链接列表中已有的内容(附加值)。
现在是我的代码:
struct node {
char value;
struct node *next;
};
typedef struct node item;
void main() {
InsertChar('a');
InsertChar('b');
InsertChar('c');
}
void InsertChar(char s) {
item *curr, *head;
head = NULL;
curr = (item *)malloc(sizeof(item));
curr->value = s;
curr->next = head;
head = curr;
while(curr) {
printf("%c", curr->value);
curr = curr->next;
}
printf("\n");
}
问题是在控制台中打印
a
b
c
我需要它来打印更像
的东西a
ab
abc
在main()中调用3个InsertChar方法。
我该怎么做?
答案 0 :(得分:1)
你的问题是在函数中本地声明了头部,当你离开函数时,它会松开它。当你再次来到这个功能时,你可以从头开始创建它等等。
所以你需要将head作为参数传递给InsertChar函数。
此外,如果要查看a,ab,abc输出,则需要在列表尾部添加元素,而不是像现在一样添加元素。为了实现这一点,你需要为tail设置一个单独的指针,或者每次都遍历到最后一个元素。
答案 1 :(得分:0)
有两个问题:
这可以解决您的问题:
struct node {
char value;
struct node *next;
};
typedef struct node item;
item * head = NULL; // global
void main() {
InsertChar('a');
InsertChar('b');
InsertChar('c');
}
void InsertChar(char s) {
item *curr, *temp;
curr = (item *)malloc(sizeof(item));
curr->value = s;
curr->next = head;
head = curr;
temp = head;
while(temp) {
printf("%c", temp->value);
temp = temp->next;
}
printf("\n");
}
答案 2 :(得分:0)
您必须跟踪列表的头部。 E.g:
struct node {
char value;
struct node *next;
};
typedef struct node item;
item* head = NULL;
item* curr = NULL;
void InsertChar(char s) {
item* c = (item *)malloc(sizeof(item));
c->value = s;
c->next = NULL;
if (head)
curr->next = c;
else
head = c;
curr = c;
for (c = head; c; c = c->next)
printf("%c", c->value);
printf("\n");
}
void main() {
InsertChar('a');
InsertChar('b');
InsertChar('c');
}
输出:
a
ab
abc