我必须编写程序,将用户输入的字符串存储到链表中,然后反向打印 - 如果用户输入Hello。输出应该是.olleH。
我不太了解列表的全部内容,但是我提出了一些建议,非常感谢任何反馈。
typedef struct L {
char c;
struct L *next;
}List;
List *getInput( void ) {
List *t = calloc(1, sizeof(List));
int i;
for (i=0; getchar() != '.'; i++) {
t->c = getchar();
t->next = NULL;
printf("%c", t->c);
t = t->c;
t->next = t->next->next;
}
return t;
}
int main ( void ) {
getInput();
return 0;
}
现在我只是尝试将它存储在列表t中,使用getchar()逐字符存储。然后我想用另一个打印它来循环计数。由于某些原因,它不起作用,而我(不完全理解列表的概念)无法弄清楚原因。
欣赏任何帮助家伙!
答案 0 :(得分:1)
由于您要反向打印输入字符串,最简单的方法是以相反的顺序将字符串存储在链接列表中,即在将字符读取到列表的开头(“head”)时将字符前置。所以在开头列表中将为空,然后它将包含“H”,然后是“eH”,“leH”等等。这是samblo代码:
List *getInput(void)
{
List *l = NULL; // list head, we'll prepend nodes here
int c; // variable for current read character
while ((c = getchar()) != EOF) { // read characters one by ine, until end-of-file
List *n = calloc(1, sizeof(List)); // create new list node
n->c = c; // store read character in that node
n->next = l; // prepend newly created node to our list
l = n; // store newly created node as head of list
}
return l;
}
以下是打印列表的方法:
void printList (List *l)
{
while (l != NULL) { // while we have not reached end of list
putchar(l->c); // print character stored in list
l = l->next; // and advance to next list node
}
}