【问题标题】:C clone linked listC克隆链表
【发布时间】:2023-03-27 04:49:01
【问题描述】:

请问如何修改cloneList函数才能正常工作? 我总是想在列表顶部添加一个新元素。我希望彼得仍然在克隆列表的顶部。我无法更改函数头

typedef struct TEmployee
{
    struct TEmployee *m_Next;
    struct TEmployee *m_Bak;
    char *m_Name;
} TEMPLOYEE;


TEMPLOYEE *newEmployee (const char *name, TEMPLOYEE *next)
{
    TEMPLOYEE *n = (TEMPLOYEE*) malloc(sizeof(*next));
    
    n->m_Name = (char*) malloc(sizeof(char)*100);

    strcpy(n->m_Name, name);
    n->m_Bak = NULL;        
    n->m_Next = next;
    
    return n;
}
 
TEMPLOYEE *cloneList(TEMPLOYEE *src)
{
    TEMPLOYEE *x;
    x = NULL;
    
    TEMPLOYEE *tmp = src;
    while(tmp)
    {
        x = newEmployee(tmp->m_Name, x);
        x->m_Bak = tmp->m_Bak;
        tmp = tmp->m_Next;
    }
    
    return x;
    
}
int main ()
{
    TEMPLOYEE *a, *b;
    a = NULL;
    b = NULL;
    
    a = newEmployee("Peter",a);
    a = newEmployee("John",a);
    ...
    
    b = clone(a);
}

【问题讨论】:

    标签: c linked-list


    【解决方案1】:

    修改你的cloneList函数如下,这样你就可以得到头节点作为返回值。

    TEMPLOYEE *cloneList(TEMPLOYEE *src)
    {
        TEMPLOYEE *x;
        x = NULL;
    
        int nCtr=0;
        TEMPLOYEE *head=NULL;
    
        TEMPLOYEE *tmp = src;
        while(tmp)
        {
            x = newEmployee(tmp->m_Name, tmp->m_Next);  //note the change
            
           x->m_Bak = tmp->m_Bak;
    
            if(nCtr == 0)
                  head = x;
    
            tmp = tmp->m_Next;
    
            nCtr++;
        }
        
        return head;  //return the first node
        
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 1970-01-01
      • 2017-05-16
      • 2015-03-27
      • 1970-01-01
      • 2019-06-17
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多