链表如何正向输出,求解

现在这个代码是一个反向输出的链表,要怎么操作才能让他变成正向输出的啊,感谢


#include 
#include 

typedef struct Link *head;
struct Link {
    int Data; /* 存储结点数据 */
    head Next; /* 指向下一个结点的指针 */
};
typedef head List; /* 定义单链表类型 */


int main()
{
    int N, i;
    List L, p;

    scanf("%d", &N);
    L = NULL;
    for ( i=0; imalloc(sizeof(struct Link));
        scanf("%d", &p->Data);
        p->Next = L;  L = p;
    }
    while(L!=NULL)
    {
        printf("%d ",L->Data);
        L=L->Next;
    }
    return 0;
}


可以使用递归的方式正向输出链表,即先递归输出链表的后续部分,再输出当前节点的值。具体实现可以参考下面的代码:

void PrintList(List L)
{
    if(L != NULL)
    {
        PrintList(L->Next);
        printf("%d ", L->Data);
    }
}

这个函数会先递归输出链表的后续部分,即 PrintList(L->Next),然后再输出当前节点的值 printf("%d ", L->Data),这样就能正向输出整个链表了。在主函数中,可以调用这个函数代替原来的 while 循环输出。

PrintList(L);

#include <iostream>
#include <vector>

using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

void printListForward(ListNode *head) {
    ListNode *p = head;
    while (p != NULL) {
        cout << p->val << " ";
        p = p->next;
    }
    cout << endl;
}

int main() {
    ListNode head(0);
    ListNode inner_node_1(1);
    ListNode inner_node_2(2);
    ListNode inner_node_3(3);

    head.next = &inner_node_1;
    inner_node_1.next = &inner_node_2;
    inner_node_2.next = &inner_node_3;

    printListForward(&head);

    return 0;
}

可以改成双链表,要么就插入的时候插入到链表尾,用一个变量存储链表尾。还有一个办法就是不改变当前逻辑,增加一个数组,输出时先输出到数组,再输出数组到屏幕

修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
typedef struct Link *head;
struct Link {
    int Data; /* 存储结点数据 */
    head Next; /* 指向下一个结点的指针 */
};
typedef head List; /* 定义单链表类型 */

int main()
{
    int N, i;
    List L, p;

    scanf("%d", &N);
    L = NULL;
    for ( i=0; i<N; i++ ) {
        //p = (List)malloc(sizeof(struct Link));
        //p->Next = L;  L = p; 这是头插法实现链表
        if (!L){                                  //修改,以下尾插法建立链表
            L = p = (List)malloc(sizeof(struct Link));
            p->Next = NULL;
        }
        else{
            p->Next = (List)malloc(sizeof(struct Link));
            p = p->Next;
            p->Next = NULL;
        }
        scanf("%d", &p->Data);
    }
    while(L!=NULL)
    {
        printf("%d ",L->Data);
        L=L->Next;
    }
    return 0;
}