/**
* Source : https://leetcode.com/problems/reverse-linked-list/
*
*
* Reverse a singly linked list.
*
* click to show more hints.
*
* Hint:
* A linked list can be reversed either iteratively or recursively. Could you implement both?
*/
public class ReverseLinkedList { /**
*
* 反转单向链表
*
* 使用迭代的方法
*
* @param head
* @return
*/
public Node reverseByIterative (Node head) {
Node pre = null;
while (head != null) {
Node next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre; } /**
* 使用递归
*
* @param head
* @return
*/
public Node reverseByRecursion (Node head, Node pre) {
if (head == null) {
return head;
}
if (head.next == null) {
head.next = pre;
return head;
}
Node next = head.next;
head.next = pre;
pre = head;
return reverseByRecursion(next, pre);
} private static class Node {
int value;
Node next; @Override
public String toString() {
return "Node{" +
"value=" + value +
", next=" + (next == null ? "" : next.value) +
'}';
}
} private static void print (Node node) {
while (node != null) {
System.out.println(node);
node = node.next;
}
System.out.println();
} public Node createList (int[] arr) {
if (arr.length == 0) {
return null;
}
Node head = new Node();
head.value = arr[0];
Node pointer = head;
for (int i = 1; i < arr.length; i++) {
Node node = new Node();
node.value = arr[i];
pointer.next = node;
pointer = pointer.next;
}
return head;
} public static void main(String[] args) {
ReverseLinkedList reverseLinkedList = new ReverseLinkedList(); print(reverseLinkedList.reverseByIterative(reverseLinkedList.createList(new int[]{1,2,3,4})));
print(reverseLinkedList.reverseByIterative(reverseLinkedList.createList(new int[]{}))); print(reverseLinkedList.reverseByRecursion(reverseLinkedList.createList(new int[]{1,2,3,4}), null));
print(reverseLinkedList.reverseByRecursion(reverseLinkedList.createList(new int[]{}), null));
} }

最新文章

  1. 禁止手机页面中A标签长按弹出路径框
  2. 【redis使用全解析】常见运维操作
  3. jdbc连接数据库总结
  4. matlab 画图数据导入
  5. 附件上传 使用javascript
  6. [转]vs2008安装失败的总结与分享
  7. 【BZOJ1009】【HNOI2008】GT考试
  8. bootstrap知识小点
  9. 在HibernateTemplate里执行Sql语句
  10. Hbase Basic Prerequisites
  11. ***PHP多线程pthreads 实现QQ号码爬虫
  12. Xfire soapHeader的WebService权限控制forjava
  13. jjQuery 源码分析1: 整体结构
  14. Spring和Struct整合的三个方法
  15. linux下ssh使用和配置
  16. 如何用googletest写单元测试
  17. Luogu:P1600 天天爱跑步
  18. Django + Axios &amp; Ajax post和get 传参
  19. python 使用PyInstaller将程序打包
  20. mysql的密码忘记了怎么办

热门文章

  1. Linux Kernel C语言编程范式
  2. IDEA 使用Mybatis效率飞起来的必备工具:MybatisCodeHelperPro 最新破解版,亲测可用!
  3. sqlzoo:2
  4. 微信跳转ticket值怎么得到?浏览器跳到微信?哪里有微信跳转接口?跳转功能能用多久?
  5. node08
  6. python 面试题知识回顾
  7. select标签默认选项
  8. CentOS7设置SVN自启动,提交报错,无权限.手动kill掉后重启,成功.
  9. python语法_模块_re(正则表达)
  10. DCOS实践分享(2):基于Docker Compose和Swarm的Docker化之路