逆置元素

来源:互联网 发布:知青子女 知乎 编辑:程序博客网 时间:2024/05/22 05:01
#include <iostream>#include<stdio.h>#include<malloc.h>using namespace std;typedef struct DNode{    int data;    struct DNode *prior;    struct DNode *next;}DLinkList;void InitList(DLinkList *&L){    L=(DLinkList *)malloc(sizeof(DLinkList));   //创建头结点    L->prior=L->next=NULL;}void CreateListF(DLinkList *&L,int a[],int n)//头插法建双链表{    DLinkList *s;    int i;    L=(DLinkList *)malloc(sizeof(DLinkList));   //创建头结点    L->prior=L->next=NULL;    for (i=0; i<n; i++)    {        s=(DLinkList *)malloc(sizeof(DLinkList));//创建新结点        s->data=a[i];        s->next=L->next;            //将*s插在原开始结点之前,头结点之后        if (L->next!=NULL)            L->next->prior=s;        L->next=s;        s->prior=L;    }}void DispList(DLinkList *L){    DLinkList *p=L->next;    while (p!=NULL)    {        printf("%d ",p->data);        p=p->next;    }    printf("\n");}void DestroyList(DLinkList *&L){    DLinkList *p=L,*q=p->next;    while (q!=NULL)    {        free(p);        p=q;        q=p->next;    }    free(p);}void reverse1 (DLinkList *&L){    DLinkList *p=L->next,*q;    L->next=NULL;    while(p!=NULL)    {        q=p->next;        p->next=L->next;        if(L->next!=NULL)            L->next->prior=p;        L->next=p;        p->prior=L;        p=q;    }}int main(){    int i,n;    int  a[100];    scanf("%d",&n);    for(i=0; i<n; i++)        scanf("%d",&a[i]);    DLinkList *L;    InitList(L);    CreateListF(L,a,n);    reverse1(L);    DispList(L);    DestroyList(L);    return 0;}