思维导图:
双向循环链表头插入:
代码:
Doublelist insert_head(Doublelist head,datatype element)
{//创建新节点sDoublelist s=create_node();if(NULL==s){return head;}s->data=element;//数据存储//判断链表是否为空if(NULL==head){head=s;return head;}else{ Doublelist rear=head->priv;//开始插入s->next=head;//把原来的头放到s的后面head->priv=s;//原来的head前指针指向shead=s;//s成为新的头//形成两个环head->priv=rear;rear->next=head;return head;}}
画图:
运行效果:
双向循环链表尾插入:
代码:
//尾插
Doublelist insert_rear(Doublelist head,datatype element)
{//创建新节点sDoublelist s=create_node();if(NULL==s){return head;}s->data=element;//数据存储//判断链表是否为空if(NULL==head){head=s;return head;}else{ Doublelist p=head; //找最后一个节点while(p->next!=head){p=p->next;}//开始插入p->next=s;//把数据存放s放到的最后一位的后面s->priv=p;//s的前一个是原来的最后一个成为新的最后一个ss->next=head;head->priv=s;return head;}}
画图:
运行效果:
双向循环链表头删除
代码:
//头删除
Doublelist del_head(Doublelist head)
{if(NULL==head){return head;}if(head->next==head){free(head);head=NULL;return head;}else{Doublelist rear=head->priv;//定位到最后一个节点,并存储Doublelist del=head;//要删除的头标志到delhead=head->next;//头节点变成原来的下一个free(del);//释放deldel=NULL;//防止del//形成环rear->next=head;head->priv=rear;return head;}}
画图:
运行效果:
双向循环链表尾删除
代码:
//尾巴删除
Doublelist del_rear(Doublelist head)
{if(NULL==head){return head;}else if(head->next==NULL){free(head);head=NULL;return head;}else{Doublelist p=head; //找倒数第二个节点while(p->next->next!=head){p=p->next;}//标记倒数第一个Doublelist del=p->next;free(del);//释放最后一个del=NULL;//防止野指针p->next=head;//新的最后一个指向空head->priv=p;return head;}
}
画图:
运行效果: