【模板】双向链表

来源:互联网 发布:linux awk 分隔符 编辑:程序博客网 时间:2024/06/05 03:04
#include <bits\stdc++.h> using namespace std;typedef long long ll;struct Node{    int key;    Node *next,*prev;};Node *nil;void init(){    nil = (Node *) malloc(sizeof(Node));    nil->next = nil;    nil->prev = nil;}void insert(int key){    Node *x = (Node *) malloc(sizeof(Node));    x->key = key;    //在头结点后添加元素     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)); }void printList(){    Node *cur = nil->next;    int isf = 0;    while(true){        if(cur == nil) break;        if(isf++ > 0) printf(" ");        printf("%d",cur->key);        cur = cur->next;    }    printf("\n");}int main() {  return 0;}//  writen by zhangjiuding