您的位置:首页 > 其它

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

2015-10-26 10:54 323 查看
第24 题:
链表操作,
单链表就地逆置

思路: 本来想拿两个指针分别指向当前节点和上一节点,在向后移动指针的过程中将当前节点的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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: