【结构体】
struct ListNode{
int val;
ListNode *prior;
ListNode *next;
ListNode():val(0),next(nullptr),prior(nullptr){}
ListNode(int x):val(x),next(nullptr),prior(nullptr){}
};
【链表初始化】
void listInit(ListNode *&head){
//带头结点
ListNode *dummy = new ListNode(-1);
dummy -> prior = nullptr;
dummy -> next = nullptr;
head = dummy;
}
【链表插入元素】
bool listInsert(ListNode *&l,int i,int e){
int j = 0;
ListNode *p = l,*cur;
while(p && j < i-1){
p = p -> next;
j++;
}
if(!p || j > i - 1){
return false;
}
cur = new ListNode(e);
if(!(p->next) || !(p->prior)){
p -> next = cur;
cur -> prior = p;
return true;
}
cur -> next = p -> next;
p -> next -> prior = cur;
p -> next = cur;
cur -> prior = p;
return true;
}
【链表删除元素】
bool listRemove(ListNode *&l,int i){
int j = 0;
ListNode *p = l;
while(p->next && j < i-1){
p = p -> next;
j++;
}
if(!(p->next) || j > i-1){
return false;
}
ListNode *q = p -> next;
if(q->next){
p -> next = q -> next;
q -> next -> prior = p;
}
else
p -> next = nullptr;
return true;
}
【链表打印】
void listPrint(ListNode *l){
ListNode *p = l -> next;
while(p){
cout << p -> val << "->";
p = p -> next;
}
cout << "NULL" << endl;
}
【测试数据】
int main(){
ListNode *l;
listInit(l);
listInsert(l,1,1);
listInsert(l,1,2);
listInsert(l,2,3);
listPrint(l);
listRemove(l,1);
listRemove(l,1);
listPrint(l);
return 0;
}