#include <iostream>
using namespace std;
struct node {
node *next;
int val;
};
typedef node* ptr_list;
ptr_list rmv_mul(ptr_list p,int n){
if(p==NULL){
return(p);
}
if (p->val%n==0){
ptr_list tmp = p->next;
delete(p);
return rmv_mul(tmp, n); // <<== Pass tmp, not p; p is deleted
} else {
p->next = rmv_mul(p->next, n); // <<== Assign to p->next
return (p);
}
}
int main() {
ptr_list p = new node;
p->val = 5;
p->next = new node;
p->next->val = 3;
p->next->next = new node;
p->next->next->val = 10;
p->next->next->next = nullptr;
ptr_list tmp = p;
cout << "before" << endl;
while (tmp) {
cout << tmp->val << endl;
tmp=tmp->next;
}
cout << "after" << endl;
tmp = rmv_mul(p, 5);
while (tmp) {
cout << tmp->val << endl;
tmp=tmp->next;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGUgewoJbm9kZSAqbmV4dDsKCWludCB2YWw7Cn07Cgp0eXBlZGVmIG5vZGUqIHB0cl9saXN0OwoKcHRyX2xpc3Qgcm12X211bChwdHJfbGlzdCBwLGludCBuKXsKICAgIGlmKHA9PU5VTEwpewogICAgICByZXR1cm4ocCk7CiAgICB9CiAgICBpZiAocC0+dmFsJW49PTApewogICAgICAgIHB0cl9saXN0IHRtcCA9IHAtPm5leHQ7CiAgICAgICAgZGVsZXRlKHApOwogICAgICAgIHJldHVybiBybXZfbXVsKHRtcCwgbik7IC8vIDw8PT0gUGFzcyB0bXAsIG5vdCBwOyBwIGlzIGRlbGV0ZWQKICAgIH0gZWxzZSB7CiAgICAgICAgcC0+bmV4dCA9IHJtdl9tdWwocC0+bmV4dCwgbik7IC8vIDw8PT0gQXNzaWduIHRvIHAtPm5leHQKICAgICAgICByZXR1cm4gKHApOwogICAgfQp9CgppbnQgbWFpbigpIHsKCXB0cl9saXN0IHAgPSBuZXcgbm9kZTsKCXAtPnZhbCA9IDU7CglwLT5uZXh0ID0gbmV3IG5vZGU7CglwLT5uZXh0LT52YWwgPSAzOwoJcC0+bmV4dC0+bmV4dCA9IG5ldyBub2RlOwoJcC0+bmV4dC0+bmV4dC0+dmFsID0gMTA7CglwLT5uZXh0LT5uZXh0LT5uZXh0ID0gbnVsbHB0cjsKCXB0cl9saXN0IHRtcCA9IHA7Cgljb3V0IDw8ICJiZWZvcmUiIDw8IGVuZGw7Cgl3aGlsZSAodG1wKSB7CgkJY291dCA8PCB0bXAtPnZhbCA8PCBlbmRsOwoJCXRtcD10bXAtPm5leHQ7Cgl9Cgljb3V0IDw8ICJhZnRlciIgPDwgZW5kbDsKCXRtcCA9IHJtdl9tdWwocCwgNSk7Cgl3aGlsZSAodG1wKSB7CgkJY291dCA8PCB0bXAtPnZhbCA8PCBlbmRsOwoJCXRtcD10bXAtPm5leHQ7Cgl9CglyZXR1cm4gMDsKfQ==