笔试题(单向链表的反转)
单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。
最容易想到的.方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:
1. struct linka {
2. int data;
3. linka* next;
4. };
5. void reverse(linka*& head) {
6. if(head ==NULL)
7. return;
8. linka *pre, *cur, *ne;
9. pre=head;
10. cur=head->next;
11. while(cur)
12. {
13. ne = cur->next;
14. cur->next = pre;
15. pre = cur;
16. cur = ne;
17. }
18. head->next = NULL;
19. head = pre;
20. }
还有一种利用递归的方法。这种方法的基本思想是在反转当前节点之前先调用递归函数反转后续节点。源代码如下。不过这个方法有一个缺点,就是在反转后的最后一个结点会形成一个环,所以必须将函数的返回的节点的next域置为NULL。因为要改变head指针,所以我用了引用。算法的源代码如下:
1. linka* reverse(linka* p,linka*& head)
2. {
3. if(p == NULL || p->next == NULL)
4. {
5. head=p;
6. return p;
7. }
8. else
9. {
10. linka* tmp = reverse(p->next,head);
11. tmp->next = p;
12. return p;
13. }
14. }
-
2017考研现场确认7大注意事项
考研现场确认是考研报名的重要环节,大家要做好准备,按照报考点要求时间地点等及时进行确认,下面是小编为大家整合的7大现场确认要事,提前了解一下吧。一、现场确认时间所有考生都应在所选报考点规定的时间内去核对、确认网上报名信息和缴费,逾期不补办未在规定时间...
-
各类学历报考研究生条件
研究生报考条件有哪些?专科生考研怎么考?同等学力怎么考研?相信很多考生都有关于研究生报考条件的疑惑,下面小小编这些问题给大家做个解答,以下是不同学历报考研究生的类别及条件:第一,大学本科学历只要满足是国家承认学历的应届、往届本科毕业生就可直接报名参加...
-
2016考研新闻传播学复习考点:外国新闻传播史
以下是本站为大家整理好的有关考研的资料,希望对大家有所帮助,如有疑问请关注本站!一、古代新闻传播发展的三个里程碑及其意义:(一)语言的产生是传播史上第一个重要的里程碑。1、应付大自然的威胁能力增强和共同劳动2、人类思维能力加强3、加快了人们信息交流的传...
-
管理类专业学位联考综合能力考试大纲
为了满足广大考生此阶段的复习需求,小编在此将对管理类专业学位联考综合能力考试大纲进行综合性的介绍。管理类专业联考主要考查学生能力:运用数学基础知识、基本方法分析和解决问题的能力;分析、推理、论证等逻辑思维能力;文字材料理解能力、分析能力以及书面表...