建立一个循环单链表,其节点有 prior,data 和 next 三个域,其中 data 为数 据域,存放元素的有效信息,next 域为指针域,指向后继节点,prior 为指针域,它的 值为 NULL

#include  
#include  
#include  
  
using namespace std;  
  
typedef struct node  
{  
    int data;  
    struct node *pre;  
    struct node *next;  
} LinkList;  
  
LinkList *Create()  
{  
    LinkList *head;  
    head=(LinkList*)malloc(sizeof(LinkList));  
    if(head!=NULL)  
    {  
        head->pre=NULL;  
        head->next=NULL;  
        return head;  
    }  
    else return NULL;  
}  
  
int Insert(LinkList *head,int e)  //尾插法
{  
    LinkList *p;  
    LinkList *q=head;  
    p=(LinkList*)malloc(sizeof(LinkList));  
    if(p!=NULL)  
    {  
        p->data=e;  
        p->pre=NULL;  
        p->next=NULL;  
        while(q->next!=NULL)  
        {  
            q=q->next;  
        }  
        q->next=p;  
        return 1;  
    }  
    return 0;  
}  
  
LinkList* Change(LinkList *head) //变成双向链表后返回一个尾指针  
{  
    LinkList *p,*q;  
    p=head;  
    q=p->next;  
    while(q!=NULL)  
    {  
        q->pre=p;  
        p=p->next;  
        q=q->next;  
    }  
    return p;  
}  
  
void Output1(LinkList *head) //从头到尾遍历输出  
{  
    LinkList *p;  
    p=head->next;  
    while(p!=NULL)  
    {  
        printf("%d ",p->data);  
        p=p->next;  
    }  
    printf("\n");  
}  
  
void Output2(LinkList *tail) //从尾到头遍历输出  
{  
    LinkList *p;  
    p=tail;  
    while(p->pre!=NULL)  
    {  
        printf("%d ",p->data);  
        p=p->pre;  
    }  
    printf("\n");  
}  
  
void FreeLink(LinkList *head)  //释放
{  
    LinkList *p,*q;  
    p=head;  
    q=NULL;  
    while(p!=NULL)  
    {  
        q=p;  
        p=p->next;  
        free(q);  
    }  
}  
  
int main()  
{  
    LinkList *phead,*tail;  
    int n,e,flag;  
    phead=Create();  
    if(phead!=NULL)  
    {  
        cout<<"请输入长度:";
scanf("%d",&n);  
        for(int i=0;i        {  
            scanf("%d",&e);  
            flag=Insert(phead,e);  
        }
cout<<"从头到尾输出为: ";
        Output1(phead);  
        tail=Change(phead); 
cout<<"从尾到头输出为: ";
        Output2(tail);  
        FreeLink(phead);  
    }  
    return 0;  
}  

你可能感兴趣的:(建立一个循环单链表,其节点有 prior,data 和 next 三个域,其中 data 为数 据域,存放元素的有效信息,next 域为指针域,指向后继节点,prior 为指针域,它的 值为 NULL)