google搜索 站内搜索                 软件测试门户 | 软件测试培训 | 文章资料精选 | 软件测试论坛 | 测试解决方案 | 软件测试博客 | 测试招聘求职 
打印

[求助] 最近遇到的面试题!!!

最近遇到的面试题!!!


1)写一个函数,完成内存之间的拷贝。
2)给定一个单向链表中的头节点,将此单向链表逆序,即原来的头节点变成末节点。


谢谢大虾们了,急需这两个面试题答案!!!

TOP

回答第二个问题


单链表逆序有两种方法:第一种是再建一个新链表,拷贝原链表内容,往前插入新链表。这种方法要耗内存空间。
第二种方法就是在原链表上改指针指向。我用C语言写了一段供参考。
if (head<>NULL)
{
  p = head;
  q = p->next;
  
  if (q->next == NULL)
  {
    p->next = NULL;
    q->next = p;
    head = q;
  }
  else
  {
    While (q->next<>NULL)
    {
      if (p == head)
        p->next = NULL;
      head = q->next;
      q->next = p;
      p = q;
      q = head;
    }
  }
}
不管结果如何,努力过了就不后悔!

TOP

看来lz是在编程方面较欠缺,恶补一下就应该能很快写出来了

TOP

全是考得烂的不能再烂的题目了,楼主真想面试的话,花点心思就一点问题都没有了
昔日驱驷马,设宴黄金台。旌悬白云外,骑猎红尘中。今来向易水,素盖转悲风。荣华与歌笑,万里尽成空。

TOP

google一下,答案就有了。
Rose

TOP

C写的


1)写一个函数,完成内存之间的拷贝。


答:
void* mymemcpy( void *dest, const void *src, size_t count )
{
    char* pdest = static_cast<char*>( dest );
    const char* psrc = static_cast<const char*>( src );
    if( pdest>psrc && pdest<psrc+cout ) 能考虑到这种情况就行了
    {
        for( size_t i=count-1; i!=-1; --i )
                pdest = psrc;
    }
    else
    {
        for( size_t i=0; i<count; ++i )
            pdest = psrc;
    }
    return dest;
}
int main( void )
{
    char str[] = "0123456789";
    mymemcpy( str+1, str+0, 9 );
    cout << str << endl;

    system( "Pause" );
    return 0;
}

TOP

牛人


各位真是牛人啊....佩服...

TOP

第二题想到一个笨办法,做个堆栈,全压进去,再全弹出来,就反过来了
方法笨了点

TOP

 
当前时区 GMT+8, 现在时间是 2008-11-23 05:18Copyright(C)上海博为峰软件技术有限公司 2001-2007 电话:021-64471599-8017
当您在访问网站、论坛及博客过程中遇到问题时可发送email:webmaster@51testing.com或发送论坛短信至管理员风在吹