微软算法100题24 就地逆序单链表
2015-10-26 10:54
323 查看
第24 题:
链表操作,
单链表就地逆置
思路: 本来想拿两个指针分别指向当前节点和上一节点,在向后移动指针的过程中将当前节点的next指针逆向为上一节点,但这样就无法继续向后移动当前节点了。。。。
转换一下思路,对于n各节点,逆序的操作可以分解为把后面n-1个节点逆序,然后再把第一个节点放在已经逆序好的n-1个元素后面就可以了 -> f(n) = [f(n-1), 1] 最后还是回到了递归上。。。
其实递归是不是也可以归于divide&conquer范畴呢?
链表操作,
单链表就地逆置
思路: 本来想拿两个指针分别指向当前节点和上一节点,在向后移动指针的过程中将当前节点的next指针逆向为上一节点,但这样就无法继续向后移动当前节点了。。。。
转换一下思路,对于n各节点,逆序的操作可以分解为把后面n-1个节点逆序,然后再把第一个节点放在已经逆序好的n-1个元素后面就可以了 -> f(n) = [f(n-1), 1] 最后还是回到了递归上。。。
其实递归是不是也可以归于divide&conquer范畴呢?
package com.rui.microsoft; public class Test24_ReverseLinkList { public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(2); node1.next = node2; Node node3 = new Node(3); node2.next = node3; Node node4 = new Node(4); node3.next = node4; Node node5 = new Node(5); node4.next = node5; Node last = reverse(node1); System.out.println("Last Node: " + last.value); System.out.print("New Order:"); while(null != node5){ System.out.print(" " + node5.value); node5 = node5.next; } } public static Node reverse(Node head){ if(null == head) return null; if(null == head.next) return head; Node last = reverse(head.next); last.next = head; head.next = null; return head; } static class Node{ int value; Node next; public Node(int value){ this.value = value; } } }
相关文章推荐
- linux 时间同步
- Leetcode_1singleNember
- mac安装tomcat、maven
- 相对熵(KL距离)的java实现
- 《从零开始学Swift》学习笔记(Day 27)——可选类型
- Android 中的 Service 全面总结
- opencv2-第五章-floodFill漫水填充算法
- http请求服务
- 指针数组和数组指针的区别
- 九度OJ 1177:查找 (字符串操作)
- eclipse关联源码
- android 权限说明——(整理,以后有用)
- C# JS 单例
- CSS 备忘
- 九度OJ 1177:查找 (字符串操作)
- 基于WEB的自行车租赁管理系统设计与实现
- 【SSH项目实战】国税协同平台-8.户帐号唯一性校验
- Worktile中的实时消息推送服务实现
- git stash 操作简记
- 关于csdn博客无法发布的问题