@
Mirana 没有判断 t 是头节点的情况。 t.prev == NULL
我不会 java ,这是 C++的写法。
注意结构体里面的 first , last 都要是指针,否则无法表示空链表
函数将新节点 n 插入 t 之前,如果 t 为 NULL 表明插入到列表尾部。
链表维护需要小心谨慎,考虑到各种情况,头尾,空链表。注意维护首尾指针。
删除的时候也是一样。
void insert(Node *t,Node* n){
//如果有 size 需要维护
//size++;
n->prev = n->next = NULL;
if (t == NULL) //用 t==NULL 指明插入到列表结尾
{
if (last==NULL) //空链表
first = last = n;
else //插入到尾部
{
last->next = n;
n->prev = last;
last = n;
}
return ;
}
if (t->prev == NULL) // 说明是第一个 也可以用 first == t
{
first = n;
n->next = t;
t->prev = n ;
return ;
}
//一般情况
t->prev->next=n;
n->prev=t->prev;
n->next=t;
t->prev=n;
}