打印
[经验分享]

一道笔试题

[复制链接]
1668|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

粉丝