以相反顺序打印链表:程序不输出任何内容
Print a linked list in reverse order: program not outputting anything
我正在尝试使用递归以相反的顺序打印链表。
IE。 :
如果我将 1,2,3,4,5 添加到链表中,程序应该输出 5,4,3,2,1。
这是代码:
#include <stdio.h>
#include <stdlib.h>
struct Node{
int data;
struct Node* next;
};
void Print(struct Node* n)
{
if(n->next == NULL)
{
return;
}
Print(n->next);
printf("%d",n->data);
}
void Insert(struct Node** head_ref,int data)
{
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = data;
new_node->next = NULL;
if((*head_ref)==NULL)
{
(*head_ref) = new_node;
}
else
{
struct Node* temp = (*head_ref);
while(temp!=NULL)
{
temp = temp->next;
}
temp->next = new_node;
}
}
int main()
{
struct Node* head = NULL;
Insert(&head,1);
Insert(&head,2);
Insert(&head,3);
Insert(&head,4);
Print(head);
}
我也试过将头指针声明为全局变量,但仍然没有输出任何内容。任何帮助,将不胜感激。
此外,如果您认为我的代码中缺少某些内容或我没有正确理解某些内容,请尽可能向我指出一些可以让我学习概念的资源。
谢谢
两个错误:
查找最后一个节点的循环条件错误。
是:
while(temp!=NULL)
虽然应该是:
while(temp->next!=NULL)
否则,更新时间:
while (temp != NULL) { ... }
temp->next = new_node; // segmentation fault
会爆炸,因为temp
在那个地方NULL
。
第二个错误:
当打印早期检查是否到达尾部时应该是:
if(n == NULL) // not `if (n->next == NULL)`
否则尾部不会被打印出来。
在这些修复之后程序打印:
1234
如果你想颠倒顺序只需交换 printf
和递归 Print()
调用:
Print(n->next);
printf("%d",n->data);
我正在尝试使用递归以相反的顺序打印链表。 IE。 : 如果我将 1,2,3,4,5 添加到链表中,程序应该输出 5,4,3,2,1。 这是代码:
#include <stdio.h>
#include <stdlib.h>
struct Node{
int data;
struct Node* next;
};
void Print(struct Node* n)
{
if(n->next == NULL)
{
return;
}
Print(n->next);
printf("%d",n->data);
}
void Insert(struct Node** head_ref,int data)
{
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = data;
new_node->next = NULL;
if((*head_ref)==NULL)
{
(*head_ref) = new_node;
}
else
{
struct Node* temp = (*head_ref);
while(temp!=NULL)
{
temp = temp->next;
}
temp->next = new_node;
}
}
int main()
{
struct Node* head = NULL;
Insert(&head,1);
Insert(&head,2);
Insert(&head,3);
Insert(&head,4);
Print(head);
}
我也试过将头指针声明为全局变量,但仍然没有输出任何内容。任何帮助,将不胜感激。 此外,如果您认为我的代码中缺少某些内容或我没有正确理解某些内容,请尽可能向我指出一些可以让我学习概念的资源。
谢谢
两个错误:
查找最后一个节点的循环条件错误。
是:
while(temp!=NULL)
虽然应该是:
while(temp->next!=NULL)
否则,更新时间:
while (temp != NULL) { ... }
temp->next = new_node; // segmentation fault
会爆炸,因为temp
在那个地方NULL
。
第二个错误:
当打印早期检查是否到达尾部时应该是:
if(n == NULL) // not `if (n->next == NULL)`
否则尾部不会被打印出来。
在这些修复之后程序打印:
1234
如果你想颠倒顺序只需交换 printf
和递归 Print()
调用:
Print(n->next);
printf("%d",n->data);