Home > Net >  How to use subscript operator overloading in linklist using c
How to use subscript operator overloading in linklist using c

Time:11-03

I want to use subscript operator overloading in linklist but everytime it give me Segmentation fault (core dumped) ERROR! MY TASK IS : (Overload [] operator. Use for loop in main to display it.) I ALSO PROVIDING THE TASK LINK BELOW //task link [LINK OF TASK] https://anonymfile.com/r1XKK/dsa-a3.pdf

//MY CODE IS :


#include <iostream>
using namespace std;
class LinkedList
{
private:

class Node
{
public:
int data;
Node * next;
Node(int data)
{
    this->data = data;
    this->next = NULL;
}
};
public:
Node *head;
LinkedList(){
head = NULL;
}
//Write a copy constructor. Also copy must be deep.
LinkedList(LinkedList& S)
    {
        head = S.head;
    }
//Overload [] operator. Use for loop in main to display it. 
void operator[](int i) {
    head->data = i;
}
void InsertAtEnd(int data){
    if (head == NULL)
        {
            head = new Node(data);
            return;
        }
        Node * temp = head;
        while (temp->next != NULL)
        {
            temp = temp->next;
        }
        temp->next = new Node(data);
    
    }
void Insert(int d1, int d2)//Add the node of data d2 after the node with data d1. If d2 is not available add it to the end.
{
    if (head == NULL)
        {
            Node * n = new Node(d2);
            n->next = head;
            head = n;
            return;
        }
        Node * temp = head;
        while (temp != NULL)
        {
            if (temp->data == d1)
            {
                Node * temp1 = temp->next;
                temp->next = new Node(d2);
                temp->next->next = temp1;
            }
            temp = temp->next;
        }
}
void Delete(int data){
     Node * todelete;
            if(head->data == data){
                todelete = head;
                head = head->next;
                free(todelete);
                return;
            }
            Node *temp = head;
            while(temp->next != NULL){
                if(temp->next->data == data){
                todelete = temp->next;
                temp->next = temp->next->next;
                free(todelete);
                break;
            }
                    temp = temp->next;
            }
} // Deletes a node with data.
int getSize(){
    Node * temp = head;
        int size = 0;
        while(temp != NULL){
        temp = temp->next;
        size  ; 
        }
        return size;
} //returns the count of elements in the list
bool IsEmpty(){
    if(head == NULL){
        return true;
    }
    else{
        return false;
    }
} //Returns true if empty.
void Merge(Node * list){
    //merge
    Node * temp  = head;
    while(temp != NULL){
        if(temp->next == NULL and list != NULL){
            temp->next = list;
            break;
        }
        temp = temp->next;
    }

    //DISPLAY
        while(head!=NULL){
            cout<<head->data<<"->";
            head=head->next;
        }
        cout<<"NULL"<<endl;
} //Merges the to the calling class.
void Erase(){
    Node * erase;
    while(head!= NULL){
        erase = head;
        head = head->next;
        head = NULL;
    }
    free(erase);

} //Deletes every node in an array.
void SelectiveErase(int num) //Find num and delete everything after num.
{
     Node * temp = head;
     Node * todelete;
        while(temp != NULL){
            if(temp->data == num){
                Node * erase = temp->next;
            while(temp->next != NULL){
                erase = temp->next;
                temp->next = temp->next->next;
                temp->next = NULL;
            }
                free(erase);
                break;
            }
                temp = temp->next;
        }
}
int FindNCount(int find)//Find and return count of all occurrence.
{
    int counter  = 0;
    bool flag = false;
    Node * temp = head;
    while(temp->data!= find){
        temp = temp->next;
        counter  ;
}
        return counter;
}
int RemoveDuplicate(int find)//Find and remove every duplicate element in the list. Make //elements unique.
{
    Node * temp = head;
    Node *temp1;
    while(temp != NULL){
        temp1 = temp;
        while(temp1->next != NULL){
             if(temp->data == temp1->next->data and temp->data == find and temp1->next->data == find){
                        Node *todelete = temp1->next;
                        temp1->next = temp1->next->next;
                        free(todelete);
             }
             else{
                temp1 = temp1->next;
             }
        }
        temp = temp->next;
    }
    return find;

}
void FindNReplace(int find, int data)//Find and replace all occurrence recursively.
{
     Node * temp = head;
            while(temp != NULL){
                if(temp->data == find){
                    temp->data = data;
                    break;
                }
                    temp = temp->next;
            }


}
void Display(){
    static Node * temp= head;
    if(temp == NULL){ cout << "NULL" << endl; return;}
    cout << temp->data<<"->";
    temp = temp->next;
    Display();
}
};
void Swap() // swap the contents of one list with another list of same type and size. Also write parameter
{
    LinkedList L,L1; 
    cout<<"AFTER SWAPING THE VALUE OF FIRST LIST \n";
    while(L.head != NULL && L1.head != NULL){
        int temp = L.head->data;
        L.head->data = L1.head->data;
        L1.head->data = temp;
        cout<<L.head->data<<"\n";
        L.head = L.head->next;
        L1.head = L1.head->next;
    }
    cout<<endl;
}
int main()
{
// You must call Display function after every function.
    LinkedList L{};
    L[23];
    // LinkedList L1;
    
    // L1.InsertAtEnd(5);
    // L1.InsertAtEnd(6);
    //L.Erase();
    // cout<<L.FindNCount(1)<<endl;
    //L.SelectiveErase(2);
    //L.Display();
    //L.Merge(L1.head);
    //L.RemoveDuplicate(2);
    //L.Display();
    //Swap();
return 0;
}

CodePudding user response:

Overloading the subscript operator should return something. The assignment looks a bit vague, but I hope this will fix it:

//Overload [] operator. Use for loop in main to display it. 
Node* operator[](int i) {
    Node* nodePtr = head;
    int counter = 0;
    while (nodePtr != NULL && counter != i) {
        nodePtr = nodePtr->next;
        counter  ;
    }
    return nodePtr;
}
  • Related