C: 打印反向链表
C: Print Reverse Linked List
我正在努力解决一个看似非常简单的关于 C 中链表的问题。这里是:
我需要打印一个元素之间带有 space 的反向链表。打印最后一个(在本例中为第一个)元素后,我必须分页而不是打印 space。所以它会是这样的:
Linked List: [1,2,3,4]
Expected Output: 4 3 2 1\n
我知道我必须存储来自第一个元素的信息,以便创建一个条件结构来实现问题的要求。但是,由于我正在使用递归,所以我不知道如何做。
这是我当前函数的状态:
void print_list(LinkedNode *start)
if(start == NULL){
return;
}
print_list(start->next);
printf("%d ", start->data);
return;
这是列表的结构:
typedef struct LinkedNode LinkedNode;
struct LinkedNode {
int data;
LinkedNode *next;
};
另请注意,除了 stdio.h 和 stdlib.h 之外,我不能使用任何 header。
我差点忘了提,但这是我的第一个问题,所以我非常感谢任何提示。
提前致谢!
如果您想以 \n
而不是 " \n"
结束,这是一个非常简单的方法。可能有更好的方法,但我只是想要一个快速的解决方案:
void print_list(LinkedNode *start, char delim)
{
if(start == NULL){
return;
}
print_list(start->next, ' ');
printf("%d%c", start->data, delim);
return;
}
int main(int argc, char** argv)
{
// initialize my_list
print_list(my_list, '\n');
}
想通了!
感谢@Afshin 和@WhozCraig!
下面的解决方案:
void print_aux(LinkedNode *start, int aux){
if(start == NULL){
return;
}
aux++;
print_aux(start->next, aux);
aux--;
if(aux!=0) printf("%d ", start->data);
else printf("%d", start->data);
return;
}
void print_list(LinkedNode *start){
print_aux(start, 0);
printf("\n");
}
我正在努力解决一个看似非常简单的关于 C 中链表的问题。这里是:
我需要打印一个元素之间带有 space 的反向链表。打印最后一个(在本例中为第一个)元素后,我必须分页而不是打印 space。所以它会是这样的:
Linked List: [1,2,3,4]
Expected Output: 4 3 2 1\n
我知道我必须存储来自第一个元素的信息,以便创建一个条件结构来实现问题的要求。但是,由于我正在使用递归,所以我不知道如何做。
这是我当前函数的状态:
void print_list(LinkedNode *start)
if(start == NULL){
return;
}
print_list(start->next);
printf("%d ", start->data);
return;
这是列表的结构:
typedef struct LinkedNode LinkedNode;
struct LinkedNode {
int data;
LinkedNode *next;
};
另请注意,除了 stdio.h 和 stdlib.h 之外,我不能使用任何 header。
我差点忘了提,但这是我的第一个问题,所以我非常感谢任何提示。
提前致谢!
如果您想以 \n
而不是 " \n"
结束,这是一个非常简单的方法。可能有更好的方法,但我只是想要一个快速的解决方案:
void print_list(LinkedNode *start, char delim)
{
if(start == NULL){
return;
}
print_list(start->next, ' ');
printf("%d%c", start->data, delim);
return;
}
int main(int argc, char** argv)
{
// initialize my_list
print_list(my_list, '\n');
}
想通了!
感谢@Afshin 和@WhozCraig!
下面的解决方案:
void print_aux(LinkedNode *start, int aux){
if(start == NULL){
return;
}
aux++;
print_aux(start->next, aux);
aux--;
if(aux!=0) printf("%d ", start->data);
else printf("%d", start->data);
return;
}
void print_list(LinkedNode *start){
print_aux(start, 0);
printf("\n");
}