双链表

来源:互联网 发布:ip地址显示阿里云 编辑:程序博客网 时间:2024/05/29 17:43
//双链表//head->a->b->c->NULL//head<-a<-b<-c#include <stdio.h>struct node{    int element;    struct node* previous;    struct node* next;};struct node* FindPreofDelete(struct node* head,int element){    struct node* t=head;    while(t->next!=NULL&&t->next->element!=element)        t=t->next;    return t;};struct node* FindPreofInsert(struct node* head,int element){    struct node* t=head;    while(t->next!=NULL&&t->next->element<=element)        t=t->next;    return t;};struct node* Delete(struct node* head,int element){    struct node* t=FindPreofDelete(head,element);    if(t->next==NULL){        printf("Not Exist!\n");        return head;    }    if(t->next->next==NULL){        free(t->next);        t->next=NULL;        return head;    }    struct node* temp=t->next;    t->next=temp->next;    temp->next->previous=t;    free(temp);};struct node* Insert(struct node* head,int element){    struct node* p;    p=(struct node*)malloc(sizeof(struct node));    p->element=element;    p->next=NULL;    if(head->next==NULL){//插到头节点后        head->next=p;        p->previous=head;        return head;    }    struct node* t=FindPreofInsert(head,element);    if(t->next==NULL){//插到尾节点后        t->next=p;        p->previous=t;        return head;    }    p->previous=t;    p->next=t->next;    t->next->previous=p;    t->next=p;    return head;}int main(){    struct node* head;    head=(struct node*)malloc(sizeof(struct node));    head->next=NULL;
    head->previous=NULL;
    //Insert    head=Insert(head,10);    //Delete    head=Delete(head,10);    return 0;}

1 0