#include "head.h"
int main(int argc, const char *argv[])
{
Doublelist L=NULL;
int n;
datatype e;
printf("please enter n:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("please enter e:");
scanf("%s",e);
// L=insert_head(e,L);//头插
L=insert_rear(e,L);//尾插
}
//循环输出
output(L);
//头删
// L=delete_head(L);
// L=delete_head(L);
// output(L);
//尾删
// L=delete_rear(L);
// L=delete_rear(L);
// output(L);
L=ni_zhi(L);
output(L);
return 0;
}
//逆置
Doublelist ni_zhi(Doublelist L)
{ //判断链表是否为空
if(NULL == L)
{
return L;
}
//判断链表是否只有一个节点
if(NULL == L->next)
{
return L;
}
//链表存在多个节点
Doublelist p=L->next;
L->next=NULL;
while(p!=NULL)
{
Doublelist t=p;
p=p->next;
t->next=L;
L->prev=t;
t->prev=NULL;
L=t;
}
return L;
}
#ifndef __HEAD_H__
#define __HEAD_H__
//双向循环链表
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef char datatype[20];//datatype-->char[20]
//定义双向链表节点的结构体
typedef struct Node
{
//数据域:数据元素
datatype data;
//指针域:下一个节点的地址
struct Node *next;
//指针域:上一个节点的地址
struct Node *prev;
}*Doublelist;
Doublelist cteate_node(); //创建节点
Doublelist insert_head(datatype e,Doublelist L);//双向链表头插
void output(Doublelist L); //循环输出
Doublelist insert_rear(datatype e,Doublelist L);//双链表尾插
Doublelist delete_head(Doublelist L); //双链表头删
Doublelist delete_rear(Doublelist L); //双链表尾删
Doublelist ni_zhi(Doublelist L); //双链表逆置