#include<cstdio>
#include<cstdlib>
typedef struct dLNode{
int data;
struct dLNode* prior;
struct dLNode* next;
}dLNode,*dLinkList;
void CreatList(dLinkList &L,int n) {
L = (dLinkList)malloc(sizeof(dLNode));
L->next = NULL;//先建立一个带头结点的双向链表
L->prior = NULL;
for (int i = n; i > 0; i--) {
dLinkList p = (dLinkList)malloc(sizeof(dLNode));//生成新结点
p->data = i;//赋予元素值
p->prior = L;
p->next = L->next;//插入到表头
if(L->next!=NULL)
L->next->prior = p;
L->next = p;
}
}
void PrintList(dLinkList L) {
dLinkList p = L->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void ReverseDlist(dLinkList &l) {
dLinkList p = l->next;
while (p)
{
dLinkList r=p->next;
if (p == l->next) {
p->prior = r;
p->next = NULL;
p = r;
continue;
}
p->next = p->prior;
p->prior = r;
if (r == NULL)break;
p = r;
}
l->next = p;
p->prior = l;
l->prior = NULL;
}
int main() {
dLinkList l;
int n = 4;
CreatList(l, 8);
PrintList(l);
ReverseDlist(l);
PrintList(l);
system("pause");
return 0;
}