// #include <bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std;
/*
*/
struct node{
int data ;
node *nxt;
node(int d , node*n=0){
data = d;
nxt = n;
}
};
class list{
node *head , *tail;
public :
list();
void add_end(int el);
bool is_empty();
void del_pos(int pos);
int size();
void deleteNodesGreaterThan(int el);
void print();
};
void list::print(){
node *t = head;
while(t!=0){
cout<<t->data<<" ";
t =t->nxt;
}
cout<<endl;
}
void list::deleteNodesGreaterThan(int el){
int i = 1;
node *tmp = head;
while(tmp != 0){
if(tmp->data > el){
del_pos(i);
}
else {
i++;
tmp = tmp->nxt; // Move to the next node only when not deleting
}
}
}
int list::size(){
int c=0;
node *tmp=head;
while(tmp!=0){
c++;
tmp = tmp->nxt;
}
return c;
}
list::list(){
head = tail = 0;
}
bool list::is_empty(){
return head==0;
}
void list::add_end(int el){
if(is_empty()){
head = tail= new node(el);
}
else {
tail->nxt= new node(el);
tail = tail->nxt;
}
}
void list::del_pos(int pos){
if(size()==1){
delete head;
head = tail = 0;
}
else if(pos==1){
node *tmp = head;
head = head->nxt;
delete tmp;
}
else if(pos==size()){
node *tmp = head;
int i =0;
while(tmp->nxt!=tail){
tmp = tmp->nxt;
}
delete tail;
tail = tmp;
tail->nxt =0;
}
else {
node *t1 = head , *t2 , *t3;
for(int i =1;i<pos-1;i++){
t1=t1->nxt;
}
t2= t1->nxt;
t3=t2->nxt;
delete t2;
t1->nxt = t3;
}
}
int main() {
list l;
l.add_end(10);
l.add_end(5);
l.add_end(-10);
l.add_end(3);
l.add_end(4);
l.add_end(0);
l.add_end(9);
l.print();
l.deleteNodesGreaterThan(5);
l.print();
}
Ly8gI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8qCgoqLwpzdHJ1Y3Qgbm9kZXsKICAgIGludCBkYXRhIDsKICAgIG5vZGUgKm54dDsKCiAgICBub2RlKGludCBkICwgbm9kZSpuPTApewogICAgICAgIGRhdGEgPSBkOwogICAgICAgIG54dCA9IG47CiAgICB9Cn07CgpjbGFzcyBsaXN0ewogICAgbm9kZSAqaGVhZCAsICp0YWlsOwoKICAgIHB1YmxpYyA6IAogICAgbGlzdCgpOwogICAgdm9pZCBhZGRfZW5kKGludCBlbCk7ICAgIAogICAgYm9vbCBpc19lbXB0eSgpOwogICAgdm9pZCBkZWxfcG9zKGludCBwb3MpOwogICAgaW50IHNpemUoKTsKICAgIHZvaWQgZGVsZXRlTm9kZXNHcmVhdGVyVGhhbihpbnQgZWwpOwogICAgdm9pZCBwcmludCgpOwoKICAgIAoKfTsKdm9pZCBsaXN0OjpwcmludCgpewogICAgbm9kZSAqdCA9IGhlYWQ7CiAgICB3aGlsZSh0IT0wKXsKICAgICAgICBjb3V0PDx0LT5kYXRhPDwiICI7CiAgICAgICAgdCA9dC0+bnh0OyAgICAgICAgCiAgICB9CiAgICBjb3V0PDxlbmRsOwp9CnZvaWQgbGlzdDo6ZGVsZXRlTm9kZXNHcmVhdGVyVGhhbihpbnQgZWwpewogICAgaW50IGkgPSAxOwogICAgbm9kZSAqdG1wID0gaGVhZDsKICAgIHdoaWxlKHRtcCAhPSAwKXsKICAgICAgICBpZih0bXAtPmRhdGEgPiBlbCl7CiAgICAgICAgICAgIGRlbF9wb3MoaSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIHRtcCA9IHRtcC0+bnh0OyAvLyBNb3ZlIHRvIHRoZSBuZXh0IG5vZGUgb25seSB3aGVuIG5vdCBkZWxldGluZwogICAgICAgIH0KICAgIH0KfQoKaW50IGxpc3Q6OnNpemUoKXsKICAgIGludCBjPTA7CiAgICBub2RlICp0bXA9aGVhZDsKICAgIHdoaWxlKHRtcCE9MCl7CiAgICAgICAgYysrOwogICAgICAgIHRtcCA9IHRtcC0+bnh0OwogICAgfQogICAgcmV0dXJuIGM7Cn0KbGlzdDo6bGlzdCgpewogICAgaGVhZCA9IHRhaWwgPSAwOwp9CmJvb2wgbGlzdDo6aXNfZW1wdHkoKXsKICAgIHJldHVybiBoZWFkPT0wOwp9CnZvaWQgbGlzdDo6YWRkX2VuZChpbnQgZWwpeyAgIAogICAgaWYoaXNfZW1wdHkoKSl7CiAgICAgICAgaGVhZCA9IHRhaWw9IG5ldyBub2RlKGVsKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHRhaWwtPm54dD0gbmV3IG5vZGUoZWwpOwogICAgICAgIHRhaWwgPSB0YWlsLT5ueHQ7CiAgICB9CgoKfQp2b2lkIGxpc3Q6OmRlbF9wb3MoaW50IHBvcyl7CiAgICBpZihzaXplKCk9PTEpewogICAgICAgIGRlbGV0ZSBoZWFkOwogICAgICAgIGhlYWQgPSB0YWlsID0gMDsKICAgIH0KICAgIGVsc2UgaWYocG9zPT0xKXsKICAgICAgICBub2RlICp0bXAgPSBoZWFkOwogICAgICAgIGhlYWQgPSBoZWFkLT5ueHQ7CiAgICAgICAgZGVsZXRlIHRtcDsKICAgIH0KICAgIGVsc2UgaWYocG9zPT1zaXplKCkpewogICAgICAgIG5vZGUgKnRtcCA9IGhlYWQ7CiAgICAgICAgaW50IGkgPTA7CiAgICAgICAgd2hpbGUodG1wLT5ueHQhPXRhaWwpewogICAgICAgICAgICB0bXAgPSB0bXAtPm54dDsKICAgICAgICB9CiAgICAgICAgZGVsZXRlIHRhaWw7CiAgICAgICAgdGFpbCA9IHRtcDsKICAgICAgICB0YWlsLT5ueHQgPTA7ICAKICAgIH0KICAgIGVsc2UgewogICAgICAgIG5vZGUgKnQxID0gaGVhZCAsICp0MiAsICp0MzsKICAgICAgICBmb3IoaW50IGkgPTE7aTxwb3MtMTtpKyspewogICAgICAgICAgICB0MT10MS0+bnh0OwogICAgICAgIH0KICAgICAgICB0Mj0gdDEtPm54dDsKICAgICAgICB0Mz10Mi0+bnh0OwogICAgICAgIGRlbGV0ZSB0MjsKICAgICAgICB0MS0+bnh0ID0gdDM7CiAgICB9CgogICAgCn0KCmludCBtYWluKCkgewogICAgbGlzdCBsOwogICAgbC5hZGRfZW5kKDEwKTsKICAgIGwuYWRkX2VuZCg1KTsKICAgIGwuYWRkX2VuZCgtMTApOwogICAgbC5hZGRfZW5kKDMpOwogICAgbC5hZGRfZW5kKDQpOwogICAgbC5hZGRfZW5kKDApOwogICAgbC5hZGRfZW5kKDkpOwogICAgbC5wcmludCgpOwogICAgbC5kZWxldGVOb2Rlc0dyZWF0ZXJUaGFuKDUpOwogICAgbC5wcmludCgpOwp9