[经验分享] 一道笔试题

[复制链接]
2267|3
 楼主| CPU单线程 发表于 2011-10-23 12:11 | 显示全部楼层 |阅读模式
某带头结点的单链表的结点结构说明如下:  
typedef struct node1  
{  
int data;  
struct node1 *next  
}node;
试设计一个算法int copy(node *head1, node *head2),将以head1为头指针的单链表复制到一个不带头结点且以head2为头指针的单链表中。
 楼主| CPU单线程 发表于 2011-10-23 12:12 | 显示全部楼层
typedef struct node1
{
int data;
struct node1 *next;
}node;

int copy(node *head1, node *head2)
{
    node *p1,*p2,*tmp;
    p1 = head1->next; //p1指向链表1的首数据
    p2 = head2;
    int re=0;
    while (p1!=NULL && p2!=NULL)
    {
        p2->data = p1->data;     //逐个复制数据
        p1=p1->next;
        p2=p2->next;
        ++re;
    }
    if (p1==NULL)      //head1的长度不长于head2,可能需要清除head2后面的数据
    {
        tmp=head2;
        while(tmp->next !=p2) tmp=tmp->next;
        tmp->next=NULL;

        while(p2!=NULL)
        {
            tmp=p2;
            p2=p2->next;
            free(tmp);
        }
    }
    else           //head1的长度大于head2,head2需要追加空间
    {
        tmp=head2;
        while(tmp->next !=p2) tmp=tmp->next;
        p2=tmp;
        while(p1!=NULL)
        {
            tmp=(node *)malloc(sizeof(node));
            tmp->data=p1->data;
            p2->next=tmp;
            p2=tmp;       //刚才漏了这一句
            ++re;
            p1=p1->next;
        }
        p2->next=NULL;
    }
    return re;
};
全才太多 发表于 2011-10-24 00:13 | 显示全部楼层
现在笔试题咋都这么难
riyuexing 发表于 2011-10-24 11:48 | 显示全部楼层
现实很残酷啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

123

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部