码迷,mamicode.com
首页 > 编程语言 > 详细

微软算法100题24 就地逆序单链表

时间:2015-10-26 12:11:09      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

第24 题:
链表操作,
单链表就地逆置

 

思路: 本来想拿两个指针分别指向当前节点和上一节点,在向后移动指针的过程中将当前节点的next指针逆向为上一节点,但这样就无法继续向后移动当前节点了。。。。

转换一下思路,对于n各节点,逆序的操作可以分解为把后面n-1个节点逆序,然后再把第一个节点放在已经逆序好的n-1个元素后面就可以了 -> f(n) = [f(n-1), 1] 最后还是回到了递归上。。。

其实递归是不是也可以归于divide&conquer范畴呢?

 

 1 package com.rui.microsoft;
 2 
 3 public class Test24_ReverseLinkList {
 4 
 5     public static void main(String[] args) {
 6         Node node1 = new Node(1);
 7         Node node2 = new Node(2);
 8         node1.next = node2;
 9         Node node3 = new Node(3);
10         node2.next = node3;
11         Node node4 = new Node(4);
12         node3.next = node4;
13         Node node5 = new Node(5);
14         node4.next = node5;
15         
16         Node last = reverse(node1);
17         System.out.println("Last Node: " + last.value);
18         System.out.print("New Order:");
19         while(null != node5){
20             System.out.print(" " + node5.value);
21             node5 = node5.next;
22         }
23     }
24     
25     public static Node reverse(Node head){
26         if(null == head) return null;
27         if(null == head.next) return head;
28         Node last = reverse(head.next);
29         last.next = head;
30         head.next = null;
31         return head;
32     }
33     
34     static class Node{
35         int value;
36         Node next;
37         public Node(int value){
38             this.value = value;
39         }
40     }
41 }

 

微软算法100题24 就地逆序单链表

标签:

原文地址:http://www.cnblogs.com/aalex/p/4910556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!