利用尾插法建立单链表,再利用头插法完成对单链表的逆置并输出逆置后的单链表

如题,利用尾插法建立单链表,再利用头插法完成对单链表的逆置并输出逆置后的单链表

注意:实现过程中,可以使用头指针和头节点两者中的任一一个作为参数传入函数中,并在函数内部通过循环进行头插法逆转操作,此处我们选择用头指针作为参数。

#include<iostream>
using namespace std;

//定义结点类型
typedef struct node {
    int data; //数据域
    struct node* next; //指针域
}Node, * LinkList;

//尾插法建立单链表
LinkList TailInsert() {
    int n, x;
    LinkList L, p, q;
    L = new Node;
    L->next = NULL;     //创建头节点
    q = L;
    cin >> n;
    for (int i = 1; i <= n; i++) { 
        cin >> x;
        p = new Node;
        p->data = x;
        p->next = NULL;
        q->next = p;
        q = p;
    }
    return L;
}

//头插法将单链表逆置
LinkList Reverse(LinkList L) {
    LinkList p, q, r;
    p = L->next;        //p为首元结点
    q = NULL;           //q为尾元结点
    while (p != NULL) {
        r = p->next;    //保存p的下一个结点
        p->next = q;    //使p->next指向q,完成逆置操作
        q = p;          //移动尾结点指针q
        p = r;          //移动头结点指针p
    }
    L->next = q;        //修改头结点指向尾结点
    return L;
}

//输出单链表
void Print(LinkList L) {
    LinkList p = L->next;
    while (p != NULL) { 
        cout << p->data << " ";
        p = p->next; 
    }
    cout << endl;
}

int main() {
    LinkList L, ReL;
    L = TailInsert();   //尾插法建立单链表
    ReL = Reverse(L);   //逆置单链表
    Print(ReL);         //输出单链表
    return 0;
}