编写算法实现带头结点单链表的就地逆置

编写算法实现带头结点单链表的就地逆置,即利用原带头结点单链表的结点空间把元素序列a₀,a₁…,aₙ₋₁逆置为aₙ₋₁,…,a₁,a₀

供参考:

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
    int data;
    struct LNode* next;
}LNode;
typedef LNode *LinkList;
//尾插法创建链表
LinkList Create_List(){
    LinkList L,p,r;
    int x;
    r=L=(LinkList)malloc(sizeof(LNode));
    L->next =NULL;
    scanf("%d",&x);
    while(x!=0){
        p=(LinkList)malloc(sizeof(LNode));
        p->data =x;
        p->next =NULL;
        r->next =p;
        r=p;
        scanf("%d",&x);
    }
    return L;
}

//带头结点的链表就地逆置
LinkList Convert_List(LinkList L) {
    LinkList  p, q;
    p = L->next;
    L->next = NULL;
    while (p != NULL) {
        q = p;
        p = p->next;
        q->next = L->next;
        L->next = q;
    }
    return L;
}

void print(LinkList L){
    LinkList p;
    p=L->next ;
    while(p!=NULL){
        printf("%d  ",p->data);
        p=p->next;
    }
    printf("\n");
}
int main() {
    LinkList L=Create_List();
    print(L);
    L=Convert_List(L);
    print(L);

    return 0;
}