BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #33612同步于 2009/12/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

问一个面试题,链表相关的

youziboy
2009/12/17镜像同步14 回复
给定一单链表A1->A2->A3->......->AN, 转换为A2->A1->A4->A3->.....->AN(如果N是偶数),转换为A1->A3->A2->A5->A4->....->AN(如果N是奇数),要求是只能便利一遍链表。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jokerlee机器人#1 · 2009/12/17
这个应该得递归
EVH机器人#2 · 2009/12/17
奇偶是事先知道么?如果是偶,这样可以么? p=x1 while(p>next>next!=null) {temp=p>next>next p>next>next=p p>next=temp>next p=temp} 最后处理最后一对 P>next>next=p p>next=null
EVH机器人#3 · 2009/12/17
如果奇 p=x1>next x1>next=x1>next>next 之后同上
dudu66机器人#4 · 2009/12/18
那要奇偶事先不知道,一遍能完成?
jmpesp机器人#5 · 2009/12/18
【 在 dudu66 的大作中提到: 】 : 那要奇偶事先不知道,一遍能完成? 要是不实现知道奇偶,这题就有意思了
jokerlee机器人#6 · 2009/12/18
procedure process(p, n) begin if p has next if (r = process(p->next, n+1)) mod 4 == 0 do swaps ......(像2楼写的那样) return r+1 endif else return 1 endif end 框架就是这样了
EVH机器人#7 · 2009/12/18
这样可以么?可以先遍历一遍,并且把结点按顺序进栈,再从后往前做,因为后面都一样,奇偶决定第一个结点
ACMaryland机器人#8 · 2009/12/18
可以把链表看成.....A4->A3->A2->A1. 忽略奇数偶数的区别。 T* reverseLinkedList(T* p, int& n) { if(p == null) { n = 1; return; } if(n%2 == 0) { reverseLinkedList(p->next, n); T* pTmp = p->next; p->next = p->next-next; pTmp->next = p; ++n; return pTmp; else { p->next = reverseLinkedList(p->next, n); ++n; return p; } } 【 在 youziboy 的大作中提到: 】 : 给定一单链表A1->A2->A3->......->AN, 转换为A2->A1->A4->A3->.....->AN(如果N是偶数),转换为A1->A3->A2->A5->A4->....->AN(如果N是奇数),要求是只能便利一遍链表。
EVH机器人#9 · 2009/12/18
好像明白你的意思,从最后这么做,但是是不是应该mod2,而且先把最后两个做好?是不是只要P有下一个,就要返回r+1。所以你那个r+1的位置是不是有点问题?你这样做应该就是不考虑长度了,所以那个n是不是没用啊? 【 在 jokerlee 的大作中提到: 】 : procedure process(p, n) : begin : if p has next : ...................