c++大神!怎么理解链表这个反转函数?
首先p是Shape这个类的指针,指向当前元素q是复制p的指针,用于反转链表位置r是上一个位置的指针while(p)即while(p!=NULL),说明没有到链表的结束(NULL)r=q就是复制q的值,即上一个位置的指针q=p是复制当前的地址p=p->next是将p向后移动q->next=r是将q指向r,即后一个指向前一个,实现反转的功能在最后,就是p=NULL的时候,q仍保存着链表的末尾,这时将head替换成q,将链表头换成链表尾,结束整个反转
链表的逆序输出(递归调用)?
先进入主函数voidmain(),主函数直接调用reverse函数,在reverse函数里,用getchar()输入一个字符,在进行判断,如果不是换行符“\n",就继续调用reverse函数,直到遇到“\n".在又进行判断是否为“\n”,若不是,用putchar()输出刚输入的字符,而且是从最后那个字符开始输出。最后全部反向输出时,程序运行完毕。希望对你有帮助,谢谢你的提问。
如何将单向链表逆序?
将一条链表按逆序输出假若头结点为L,则有; p=q=L;/*p,q为指向头结点的两个指针*/ while(p->next!=NULL) p=p->next;/*让p指向键表的最后一个要访问结点*/ while(1) { while(q->next!=p) q=q->next;/*让q向后找,找到最后一个要打印的结点*/ printf("%d\n",p->data); p=q;/*p向前移动一个*/ q=L;/*q又指向头结点*/ if(p=L)/*访问完了退出*/ break; }你参考吧
java面试中算法方面应该如何准备?
Java面试中经常问到的算法题目如下:
- 二叉树宽度遍历
- 红黑树
- 数据结构的话,链表,树,图的基本知识得懂
- 了解树的先序遍历,中序遍历,后序遍历。图的广度优先搜索算法,深度优先搜索算法。
- 手撕算法:反转单链表
- 手撕算法:实现类似微博子结构的数据结构,输入一系列父子关系,输出一个类似微博评论的父子结构图
- 手写java多线程
- 手写java的soeket编程,服务端和客户端
- 手撕算法: 爬楼梯,写出状态转移方程
- 智力题:时针分针什么时候重合
以上是总结的Java面试中有关算法的高频问题。
除此之外,Java面试中还会问到Spring+多线程JVM+集合Spring+数据库计算机网路+中间件等相关问题,【2019年最新BAT高级Java必考面试题+答案】送给大家,本文下面点赞,关注+私信回复【bat】,即可领取。
点赞+关注+私信[bat],即可领取。
我曾经面试过很多一线互联网大公司,确实这一类的公司面试的时候比较注重算法(不过自己的经验和朋友的说法来看,工作中从来都用不到)!
问的算法方面的知识也不会很深,比如之前在一家公司,要求我写一个二分法查找的伪代码,就写个思路即可,还有的要求说出二叉搜索树,红黑树,还有诸如冒泡排序,快速排序,插入排序等方式的性能以及如何选择最优的方式!
其实如果不是跟大数据,搜索,统计这些息息相关的工作岗位,问的算法都比较简单,就看你有没有了解过基本算法和解决思路!
其实,在面试过程中数据结构问的更多一些,比如说hashMap的内部结构,如何扩容,扩容时候的线程安全问题,JAVA8中为什么加入红黑树?arraylist,linkedlist区别与应用场景?等等这种JAVA中常用的数据结构的深入理解!
所以,如果您要面试的话,我的建议是,基本的算法,比如二分查找,递归,基本的排序算法等掌握其思路,写出伪代码,基本的数据结构掌握其底层源码和优缺点!基本算法和数据结构这一块就OK了!