#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;
}