无法撤消双向链表中的元素

时间:2020-03-30 16:36:53

标签: c linked-list reverse doubly-linked-list function-definition

我正在处理双链表。元素按正常顺序完美打印。但是我无法以相反的顺序显示它们。我在网上找到的方法之一是通过交换方法。 但是我想打印它们而不交换方法。我还有其他可能的方法可以实现这一目标吗?

谢谢。

Open Editors

1 个答案:

答案 0 :(得分:0)

对于初学者,此提示

printf("1: Create List\n");

令人困惑,因为实际上列表不是在此选择中创建的,而是将新节点附加到列表中。我将把提示重命名为“ 1:将节点追加到列表\ n”。

函数create不正确,因为它没有设置指针end

使用您的方法,可以通过以下方式定义函数。

list *create( list *start, list **end )
{
    int num;

    printf( "Enter the number: " );
    scanf( "%d",&num );

    list *new_node = malloc( sizeof( list ) );
    new_node->data = num;
    new_node->next = NULL;

    if ( start == NULL )
    {
        new_node->prev = NULL;
        start = *end = new_node;
    }
    else
    {
        new_node->prev = end;
        *end = ( *end )->next = new_node;
    }

    return start;
}

该函数的调用方式必须

start = create( start, &end );

在这种情况下,可以像

那样定义revrese_display函数。
list * reverse_display( list *end )
{
    printf("\nElements in reverse order\n");

    if ( end != NULL )
    {
        do 
        {
            printf( "%d\n", end->data );
            if ( end->prev != NULL ) end = end->prev;
        } while ( end->prev != NULL ); 
    }

    return end; // now end is equal to start
}

尽管从该函数开始返回指针并没有太大意义,两个函数displayreverse_display的返回类型为void

此外,列表本身应声明为一个单独的结构,其中包含指向起始节点和终止节点的两个指针。