#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;
}
逆置元素
最新推荐文章于 2021-10-02 12:49:18 发布