- 4
- 0
- 约1.54万字
- 约 55页
- 2016-12-28 发布于贵州
- 举报
C/C++笔试题目 我的面试的一家公司的笔试题目
1-2-3-4-5通过反转后成为5-4-3-2-1。
最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:
1.structlinka{
2.intdata;
3.linka*next;
4.};
5.voidreverse(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-
原创力文档

文档评论(0)