【结构体】
struct ListNode{
int val;
ListNode *next;
ListNode():val(0),next(nullptr){}
ListNode(int x):val(x),next(nullptr){}
};
【链表插入元素】
//插入
bool listInsert(ListNode* &l,int i,int e){
//遍历指针p
ListNode *p,*cur;
int j = 0;
p = l;
//找到第i-1位置
while(p && j < i-1){
p = p -> next;
j++;
}
//如果i<1或者i>length+1 则插入失败
if(!p || j > i-1)
return false;
cur = new ListNode(e);
cur -> next = p -> next;
p -> next = cur;
return true;
}
【链表删除元素】
//删除
bool listRemove(ListNode* &l,int i){
ListNode *p = l;
int j = 0;
while(p -> next&& j < i-1){
p = p -> next;
j++;
}
//如果i<1或者i>length 则删除失败
if(!(p->next) || j > i-1)
return false;
p -> next = p -> next -> next;
return true;
}
【链表打印测试】
void listPrint(ListNode* l){
ListNode *p = l -> next;
while(p){
cout << p -> val;
cout << "->";
p = p -> next;
}
cout << "NULL" << endl;
}
【链表初始化】
void listInit(ListNode* &head){
//带头结点单链表
ListNode *dummy = new ListNode(-1);
head = dummy;
}
【测试数据】
int main(){
ListNode *l;
listInit(l);
listInsert(l,1,2);
listInsert(l,2,1);
listPrint(l);
listInsert(l,4,3);
listPrint(l);
listRemove(l,1);
listPrint(l);
return 0;
}