双向链表(一)

来源:互联网 发布:华为双卡切换网络数据 编辑:程序博客网 时间:2024/06/14 21:57

struct Node{

    int key;

    Node *prev,*next;

};


//初始化双向链表,创建一个空表

Node *nil;

void init(){

    nil=(Node *)malloc(sizeof(Node));

    nil->prev=nil;

    nil->next=nil;

}


//往双向链表插入元素,添加到表的开头

void insert(int key){

    Node *x=(Node *)malloc(sizeof(Node));

    x->key=key;

    //头节点后添加元素

    //x作为头节点

    x->next=nil->next;

    nil->next->prev=x;

    nil->next=x;

    x->prev=nil;

}

//在双向链表中插入元素

Node* listSearch(int key){

    Node *cur=nil->next;//从头节点后面的元素开始访问

    while(cur!=nil&&cur->key!=key){

        cur=cur->next;

    }

    return cur;

}


//从双向链表中删除元素

void deleteNode(Node *t){

    if(t==nil)return ;//t为头节点时不处理。

    t->prev->next=t->next;

    t->next->prev=t->prev;

    free(t);

}


void deleteFirst(){

    deleteNode(nil->next);

}


void deleteLast(){

    deleteNode(nil->prev);

}


void deleteKey(int key){

    //删除搜索到的节点

    deleteNode(listSearch(key));

}


原创粉丝点击