I am trying to clone one linked list to another but I am getting segmentation fault. I have a structure with with two pointers m_Next and m_Bak and I have a char pointer which stores the name. I am trying to do it in C++. I need to clone src and return a cloned linked list.
TEMPLOYEE        * cloneList    ( TEMPLOYEE       * src ) {
    TEMPLOYEE* curr = src, *temp;
    while (curr) {
        temp = curr->m_Next;
        temp->m_Name = new char[strlen(curr->m_Name) + 1];
        strcpy ( temp->m_Name, curr->m_Name);
        curr->m_Next->m_Next = temp;
        curr = temp;
    }
    curr = src;
    while (curr) {
        curr->m_Next->m_Bak = curr->m_Bak->m_Next;
        curr = curr->m_Next?curr->m_Next->m_Next:curr->m_Next;
    }
    TEMPLOYEE* original = src, *copy = src->m_Next;
    temp = copy;
    while (original && copy)
    {
        original->m_Next =
                original->m_Next? original->m_Next->m_Next : original->m_Next;
        copy->m_Next = copy->m_Next?copy->m_Next->m_Next:copy->m_Next;
        original = original->m_Next;
        copy = copy->m_Next;
    }
    return temp;
  }
EDIT:
I got where the problem was.
TEMPLOYEE        * cloneList    ( TEMPLOYEE       * src ) {
    if(!src) return NULL;
    TEmployee * current = src;
    while(current){
        TEmployee * current_next = current->m_Next;
        current->m_Next  =  newEmployee(current->m_Name,current->m_Next);
        current->m_Next->m_Next = current_next;
        current = current_next;
    }
    current = src;
    TEmployee * clone_head  = current->m_Next;
    while(current){
        TEmployee * clone = current->m_Next;
        if(current->m_Bak){
            clone->m_Bak    = current->m_Bak->m_Next;
        }
        current = clone->m_Next;
    }
    current = src;
    while(current){
        TEmployee * clone  = current->m_Next;
        current->m_Next = clone->m_Next;
        if(clone->m_Next){
            clone->m_Next = clone->m_Next->m_Next;
        }
        current = current->m_Next;
    }
    return clone_head;
}
 
    