查看: 4021| 回复: 14
跳转到指定楼层
上一主题 下一主题
收起左侧

Microsoft(1) Recerse linked list by block

 
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
//Reverse linklist in block
//eg. block size is 3 and list is
//1 2 3 4 5 6 7 8
//Output: 3 2 1 6 5 4 8 7

LNK_NODE*  ReverseByBlock(LNK_NODE* pHead ,int nBlockSize)

这个题方法大家都知道。
计个时,看看谁能做到在两小时内写出无bug的代码,请上代码,自附testcase

上一篇:java mail + gmail的问题
下一篇:Ananimous(1) C++找bug
🔗
vvnesaa 2011-4-18 14:31:13 | 只看该作者
全局:
本帖最后由 vvnesaa 于 2011-4-18 16:05 编辑

我猜肯定有错,没有空看了@@
update:果然有变量没赋初值。。。
update:被GG指出来pointer定义时忘记在answer前写*了>_<
  1. LNK_NODE*  ReverseByBlock(LNK_NODE* pHead ,int nBlockSize)
  2. {

  3.         LNK_NODE* head = NULL, *answer = NULL;
  4.         while (pHead != NULL)
  5.         {
  6.                 LNK_NODE* temp = NULL;
  7.                 for (int i = 0; i < nBlockSize; ++i)
  8.                 {
  9.                         if (pHead == NULL) break;
  10.                         LNK_NODE* SwapPt = pHead;
  11.                         pHead = pHead->next;
  12.                         SwapPt->next = temp;
  13.                         temp = SwapPt;
  14.                 }
  15.                 if (head == NULL)
  16.                 {
  17.                         head = temp;
  18.                         answer = temp;
  19.                 }
  20.                 else
  21.                         answer->next = temp;
  22.                 while (answer->next != NULL)
  23.                         answer = answer->next;
  24.         }
  25.         return head;
  26. }
复制代码
回复

使用道具 举报

🔗
一剑终情 2011-4-18 15:31:39 | 只看该作者
全局:
这种计时的方式挺好的,我觉得以后人气高了可以定期或者不定期组织限时比赛- -

算了还是干脆做一个online judge系统好了- -

不过像我们这种面向招工的版块,还是不要太ACM化的比较好

扯远了。。。继续重装VS2010去了。。真蛋疼
回复

使用道具 举报

🔗
vvnesaa 2011-4-18 15:57:06 | 只看该作者
全局:
回复 3# 一剑终情

OJ我觉得不用。。。
OJ那么多,比赛也很多。。。
而且对面试来说有些能力是不需要的吧@@
比如快速读题和疯狂找弱题@@
我也扯远了。。。

我觉得可以每天定时发几道题,限时不限时都ok~
每天跟着做肯定会有进步的~~
回复

使用道具 举报

🔗
一剑终情 2011-4-18 16:08:54 | 只看该作者
全局:
回复 4# vvnesaa


    是。。我写着写着也发现其实没必要。。
我这个帖子就是一个自己立论然后又自己驳论的过程。。
回复

使用道具 举报

🔗
 楼主| wwwyhx 2011-4-18 18:16:17 | 只看该作者
全局:
我猜肯定有错,没有空看了@@
update:果然有变量没赋初值。。。
update:被GG指出来pointer定义时忘记在a ...
vvnesaa 发表于 2011-4-18 14:31



    错误那是相当多
回复

使用道具 举报

🔗
vvnesaa 2011-4-18 18:22:14 | 只看该作者
全局:
回复 6# wwwyhx

啊。。。现在还有错哦@@
啥错,跪求指导!
回复

使用道具 举报

🔗
Warald 2011-4-18 21:14:00 | 只看该作者
全局:
这种计时的方式挺好的,我觉得以后人气高了可以定期或者不定期组织限时比赛- -

算了还是干脆做一个onlin ...
一剑终情 发表于 2011-4-18 15:31


你现在可以逐渐college ideas,开版过段时间之后,大家可以再合计,想想可以做哪些改进。
回复

使用道具 举报

🔗
一剑终情 2011-4-18 21:54:35 | 只看该作者
全局:
本帖最后由 一剑终情 于 2011-4-19 09:00 编辑

写了一个超级囧的 ,都忘了用nBlockSize了。。。

  1. LNK_NODE*  ReverseByBlock(LNK_NODE* pHead ,int nBlockSize)
  2. {
  3.         LNK_NODE *last = pHead;
  4.         LNK_NODE *index = pHead;
  5.         short flag = 0;
  6.         bool end = 0;

  7.         while (!end)
  8.         {
  9.                 flag = 0;
  10.                 while (flag < 3 && index->next != NULL)
  11.                 {
  12.                         index = index->next;
  13.                         flag++;
  14.                 }

  15.                 switch (flag)
  16.                 {
  17.                         case 3:
  18.                                 LNK_NODE *begin = NULL;
  19.                                 LNK_NODE *mid = NULL;
  20.                                 LNK_NODE *end = NULL;
  21.                                 LNK_NODE *temp = NULL;
  22.                                
  23.                                 end = last->next;
  24.                                 mid = end->next;
  25.                                 begin = mid->next;

  26.                                 temp = begin->next;
  27.                                 last->next = begin;
  28.                                 begin->next = mid;
  29.                                 mid->next = end;
  30.                                 end->next = temp;

  31.                                 last = end;
  32.                                 break;

  33.                         case 2:
  34.                                 LNK_NODE *begin = NULL;
  35.                                 LNK_NODE *end = NULL;

  36.                                 end = last->next;
  37.                                 begin = end->next;

  38.                                 last->next = begin;
  39.                                 begin->next = end;
  40.                                 end->next = NULL;

  41.                                 end = 1;
  42.                                 break;

  43.                         case 1:
  44.                         case 0:
  45.                                 end = 1;
  46.                                 break;
  47.                 }
  48.         }
  49.         return pHead;
  50. }
复制代码
回复

使用道具 举报

🔗
Imbalism 2011-4-18 23:26:47 | 只看该作者
全局:
写的累死啦!无注释。。。



  1. //Reverse linklist in block
  2. //eg. block size is 3 and list is
  3. //1 2 3 4 5 6 7 8
  4. //Output: 3 2 1 6 5 4 8 7
  5. #include <iostream>
  6. using namespace std;

  7. class LNK_NODE
  8. {
  9. public:
  10.      int element;
  11.      LNK_NODE *next;
  12.      LNK_NODE(const int& elem, LNK_NODE* nextval = NULL)
  13.           {element = elem; next = nextval;}
  14. };

  15. LNK_NODE* ReverseByBlock(LNK_NODE* pHead ,int nBlockSize)
  16. {
  17.      if(!pHead)
  18.           return NULL;
  19.      LNK_NODE* hn = new LNK_NODE(-1);
  20.      hn->next = pHead;
  21.      LNK_NODE* ih = hn;
  22.      while(true)
  23.      {
  24.           LNK_NODE* np = ih->next;
  25.           LNK_NODE* ip = ih;
  26.           int i;
  27.           for(i = 0; i < nBlockSize; i++)
  28.           {
  29.                if(np == NULL)
  30.                     break;
  31.                LNK_NODE* temp = np;
  32.                np = np->next;
  33.                temp->next = ip;
  34.                ip = temp;
  35.           }
  36.           LNK_NODE* temp = ih->next;
  37.           if(ih->next != NULL)
  38.                ih->next->next = np;
  39.           ih->next = ip;
  40.           ih = temp;
  41.           if(i != nBlockSize)
  42.                break;          
  43.           if(np == NULL)
  44.                break;
  45.      }
  46.      pHead = hn->next;
  47.      delete hn;
  48.      return pHead;
  49. }

  50. LNK_NODE* create(int size)
  51. {
  52.      if(size == 0)
  53.           return NULL;
  54.      LNK_NODE* t= new LNK_NODE(0, NULL);
  55.      LNK_NODE* h = t;
  56.      for(int i = 1; i < size; i++)
  57.           t = t->next = new LNK_NODE(i, NULL);
  58.      return h;
  59. }
  60. void print(LNK_NODE* h)
  61. {
  62.      while(h!=NULL)
  63.      {
  64.           cout << h->element << endl;
  65.           LNK_NODE* t = h;
  66.           h = h->next;
  67.           delete t;
  68.      }
  69.      cout << "test case finished----" << endl;
  70. }

  71. int main()
  72. {
  73.      for(int i = 1; i <= 10; i++)
  74.      {
  75.           LNK_NODE* h = create(10);
  76.           h = ReverseByBlock(h,i);
  77.           print(h);
  78.      }
  79.      return 0;
  80. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表