补充之前中兴校招面试的问题(软件开发岗位)

补充一下之前中兴面试的时候的几个问题,再不不上来就要忘光了:
1、静态变量和全局变量的区别是什么?
(待我有了充分理解之后补充)
2、写一个在单链表尾部插入一个节点的函数。
这个题目面试的时候写完了觉得自己很自信,觉得写的很好,现在回忆到的现场写的程序大概是下面这样的。但是其实千疮百孔。

void insert_at_end(struct node* head,struct node* toInsert)
{
    struct node * p;
    p = head;
    while(NULL != p->next)
    {
        p = p->next;
    }
    p->next = toInsrt;
}
  • 首先,正常在尾部插入节点的函数,应该是不会传递节点进去的,应该是只会把待插入的值告诉你,所以正常的函数声明应该是这样的void insert_at_end(struct node * head,int val)(假设插入一个整型值),而不是上面的void insert_at_end(struct node * head,struct node * dot)
  • 依照上面的这个安排,那么我们在进入函数找到位置之后,其实还应该要动态申请一个节点内存struct node * new_dot = (struct noede *)malloc(sizeof(struct node));
  • 然后,插入完成之后,要想想,为什么我能够找到链表的尾部,是因为我们通过判断尾部节点的指针是空的。那么我们插入完成一个节点完事儿之后屁股都不擦就走了吧!那不行,我们还应该把末尾节点的指针置为空,这样下一次别人来管理该链表的时候才能知道尾部节点在哪里
  • 另外一个倒不是变成上面的问题,而是思路上的反应不快。回去和同学讨论这个编程题,我说了一句:“单链表只能插入到尾部啊,怎么可能在中间呢?”说出来才想起来,怎么不可能呢。闹了个大笑话。当然需要指导待插入节点的指针。
    下面贴上自己认为是正确的代码片吧(还没有通过程序验证)
void insert_at_end(struct node* head,int val_to_insert)
{
    struct node * p;
    p = head;
    while(NULL != p->next)
    {
        p = p->next;
    }
    p->next = (struct node*)malloc(sizeof(struct node));
    p = p->next;
    p->next = NULL;
    p->val = val_to_insert;
}

下面是在链表中间已知节点插入数值的程序

void insert_here(struct node* here,int val_to_insert)
{
    struct node * p1,p2;
    p1 = here->next;
    p2 = (struct node*)malloc(sizeof(struct node));
    p2->val = val_to_insert;
    here->next = p2;
    if(NULL != p1)
    {
        p2->next = p1;
    }
    else
    {
        p2->next = NULL;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值