CCCPaste

Untitled

#include 
using namespace std;

struct node {
    int val;
    node * next;
};
struct SLCL {
    node *head, *tail;
    
    void init() {
        head = NULL;
        tail = NULL;
    }
    void insertFirst(int x) {
        node * new_node = new node;
        new_node->val = x;
        if(head == NULL) {
            head = new_node;
            head->next = head;
            tail = head;
        }
        else {
            new_node->next = head;
            head = new_node;
            tail->next = head;
        }
    }
    void insertLast(int x) {
        node * new_node = new node;
        new_node->val = x;
        if(head == NULL) {
            head = new_node;
            head->next = head;
            tail = head;
        }
        else {
            tail->next = new_node;
            tail = new_node;
            tail->next = head;
        }
    }
    
    void deleteFirst() {
        if(head != NULL) {
            if(head->next == head) {
                delete head;
                head = NULL;
                tail = NULL;
            }
            else {
                node *tmp = head;
                head = head->next;
                tail->next = head;
                delete tmp;
                
            }
        }
    }
    void deleteLast() {
        if(head != NULL) {
            if(head -> next == head) {
                delete head;
                head = NULL;
                tail = NULL;
            }
            else {
                node *tmp = head;
                while(tmp->next != tail) {
                    tmp = tmp->next;
                }
                tail = tmp;
                delete tmp->next;
                tail->next = head;
            }
        }
    }
    void print() {
        node *tmp = head;
        
        while(tmp != tail) {
                cout << tmp->val << "--> ";
                tmp = tmp->next;
            
            }
        cout << tmp->val << endl;
            
        }
    
};
int main() {
   
    SLCL slcl;
    slcl.init();
    slcl.insertFirst(1);
    slcl.insertFirst(2);
    slcl.insertLast(3);
    slcl.insertLast(4);
    slcl.print();
    
    
    slcl.deleteFirst();
    slcl.print();
    slcl.deleteLast();
    slcl.print();
    
    return 0;

}