#问题
删除链表中相同元素时,采用delete_x1(Node** L,int x),能正常删除元素,并且不会断链,但使用delete_x1(Node* L,int x),不能正常删除元素,会造成断链
#include<iostream>
using namespace std;
struct Node{
int val;
Node* next;
Node():next(NULL){}
Node(int val):val(val),next(NULL){}
};
void delete_x1(Node*& L,int x){
if(L == NULL)return;
Node* p;
if(L->val == x){
p=L;
L=L->next;
free(p);
delete_x1(L,x);
}else{
delete_x1(L->next,x);
}
}
void delete_x2(Node* L,int x){
if(L == NULL)return;
Node* p;
if(L->val == x){
p=L;
L=L->next;
free(p);
delete_x2(L,x);
}else{
delete_x2(L->next,x);
}
}
int main()
{
Node* head = new Node(1);
Node* p = head;
Node* p1 = head;
//头插法插入结点
for(int i=2;i<=4;i++){
Node* tmp = new Node(i);
tmp->next = head->next;
head->next = tmp;
}
//头插法插入结点
Node* t1 = new Node(2);
t1->next = head->next;
head->next = t1;
//头插法插入结点
Node* t2 = new Node(2);
t2->next = head->next;
head->next = t2;
cout<<"删除前:";
while(p!=NULL){
cout<<p->val<<" ";
p=p->next;
}
delete_x1(head,2); //采用二级指针,不会断链?
// delete_x2(head,2); 采用一级指针,会断链?
cout<<"删除后:";
while(p1!=NULL){
cout<<p1->val<<" ";
p1=p1->next;
}
return 0;
}
请问为什么使用函数 delete_x1(Node*& L,int x) 可以正常删除,不会造成断链
函数delete_x1 运行结果