【发布时间】:2020-07-11 02:18:12
【问题描述】:
我正在研究双链表。元素以正常顺序完美打印。但我无法以相反的顺序显示它们。我在网上找到的一种方法是交换方法。 但我想在不交换方法的情况下打印它们。有没有其他可能的方法可以实现这一目标?
提前致谢。
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
struct node *prev;
}list;
list *start=NULL;
list *end=NULL;
list *create(list *);
list *display(list *);
list *reverse_display(list *);
int main()
{
int n;
printf("1: Create List\n");
printf("2: Display\n");
printf("3: Reverse Display\n");
for(;;)
{
printf("Enter choice: ");
scanf("%d",&n);
switch(n)
{
case 1: start = create(start);
break;
case 2: start = display(start);
break;
case 3: start = reverse_display(start);
break;
default: printf("Wrong Input!!!\n");
exit(0);
}
}
}
list *create(list *start)
{
int num;
list *new_node , *ptr;
printf("Enter the number: ");
scanf("%d",&num);
new_node = (list *)malloc(sizeof(list));
new_node->data = num;
if(start == NULL)
{
new_node->prev = NULL;
new_node->next = NULL;
start = new_node;
}
else
{
ptr = start;
while(ptr->next != NULL)
ptr = ptr->next;
ptr->next = new_node;
new_node->prev = ptr;
new_node->next = NULL;
}
return start;
}
list *display(list *start)
{
list *ptr;
ptr = start;
printf("\nElements in original order:\n");
if(start == NULL)
printf("Empty List!!!\n");
else
{
while(ptr!=NULL)
{
printf("%d\n",ptr->data);
ptr=ptr->next;
}
}
return start;
}
list *reverse_display(list *start)
{
list *ptr;
ptr = end;
printf("\nElements in reverse order\n");
while(ptr != start->prev)
{
printf("%d\n",ptr->data);
ptr = ptr->prev;
}
return start;
}
【问题讨论】:
-
您是想反转列表,还是只是以相反的顺序浏览并打印内容?
-
只想逆序导航并打印元素。
-
任何只是导航的函数都不需要返回任何东西。你的
reverse_display函数有什么问题? -
OT:关于:
new_node = (list *)malloc(sizeof(list));1) 在 C 中,返回的类型是void*,可以分配给任何指针。强制转换只会使代码混乱。建议去掉演员表。 2) 始终检查 (!=NULL) 返回值以确保操作成功。如果不成功,调用perror( "your error message" ); cleanup, then callexit(EXIT_FAILURE);` -
OT:使用可变宽度字体时,2 个字符的缩进将“丢失”。建议每个缩进级别使用 4 个空格
标签: c linked-list reverse doubly-linked-list function-definition