www.pudn.com > View3D.zip > linklist.h


#ifndef LINK_LIST_H
#define LINK_LIST_H

#include 
using namespace std;

template
class LinkList
{
 public:
  LinkList();
  int append(T * E);
  int prepend(T * E);
  int length();
  int erase(T * E);
 public:
  T * begin;
  T * end;
  int size;
};

template
LinkList::LinkList()
{
  begin = NULL;
  end = NULL;
  size = 0;
}

template
int LinkList::append(T * E)
{
  if(begin == NULL && end == NULL){
    begin = E;
    end = E;
    end->next = NULL;
    begin->prev = NULL;
  }else{
    end->next = E;
    E->prev = end;
    end = E;
    end->next = NULL;
  }
  size ++;
  return 1;
}

template
int LinkList::prepend(T * E)
{
  if(begin == NULL && end == NULL){
    begin = E;
    end = E;
    end->next = NULL;
    begin->prev = NULL;
  }else{
    begin->prev = E;
    E->next = begin;
    begin = E;
    begin->prev = NULL;
  }
  size ++;
  return 1;
}

template
int LinkList::erase(T * E)
{
  if(begin == E){
    begin = E->next;
    begin->prev = NULL;
  }else if(end == E){
    end = E->prev;
    end->next = NULL;
  }else{
    E->prev->next = E->next;
    E->next->prev = E->prev;
  }
  E->prev = NULL;
  E->next = NULL;
  size--;
  return 1;
}

#endif