📄 list.h
字号:
#include "link.h"
template <class Elem>
class mylist
: public Link<Elem>
{
private:
Link<Elem> *head;
Link<Elem> *tail;
Link<Elem> *fence;
int leftcnt,rightcnt;
void init()
{
fence = tail = head = new Link<Elem>;
leftcnt = rightcnt = 0;
}
void removeall()
{
while(head != NULL)
{
fence = head;
head = head->next;
delete fence;
}
}
public:
mylist() {init();}
~mylist() {removeall();}
void clear() {removeall(); init();}
void setStart() {fence = head; rightcnt += leftcnt; leftcnt = 0;}
void setEnd() {fence = tail; leftcnt += rightcnt; rightcnt = 0;}
bool insert(const Elem & E)
{
fence->next = new Link<Elem> (E,fence->next);
if(tail == fence) tail = fence->next;
rightcnt++;
return true;
}
bool append(const Elem & E)
{
tail = tail->next = new Link<Elem> (E,NULL);
rightcnt++;
return true;
}
bool remove(Elem & E)
{
if(fence->next == NULL) return false;
E = fence->next->element;
Link<Elem> * tmp = fence->next;
if(tail == tmp) tail = fence;
delete tmp;
return true;
}
int leftLength() {return leftcnt;}
int rightlength() {return rightcnt;}
bool setPos(int pos)
{
if(pos<0 || pos > rightcnt+leftcnt) return false;
fence = head;
for(int i=0;i<pos;i++)
{
fence = fence->next;
}
return true;
}
bool next()
{
if(fence == tail) return false;
fence = fence->next;
rightcnt--;
leftcnt++;
return true;
}
bool getValue(Elem & it)
{
if(rightcnt == 0) return false;
it = fence->next->element;
return true;
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -