leetcode — reverse-linked-list
/**
 * 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));
    }
}
												
											leetcode — reverse-linked-list的更多相关文章
- [LeetCode] Reverse Linked List 倒置链表
		
Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed either i ...
 - [LeetCode] Reverse Linked List II 倒置链表之二
		
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...
 - 【原创】Leetcode -- Reverse Linked List II -- 代码随笔(备忘)
		
题目:Reverse Linked List II 题意:Reverse a linked list from position m to n. Do it in-place and in one-p ...
 - [leetcode]Reverse Linked List II @ Python
		
原题地址:https://oj.leetcode.com/problems/reverse-linked-list-ii/ 题意: Reverse a linked list from positio ...
 - [LeetCode] Reverse Linked List II
		
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...
 - [LeetCode] Reverse Linked List
		
Reverse a singly linked list. 这题因为palindrome linked list 的时候需要就顺便做了一下.利用三个指针:prev, now, next 相互倒腾就行. ...
 - (leetcode)Reverse Linked List 脑子已经僵住
		
Reverse a singly linked list. 参考http://www.2cto.com/kf/201110/106607.html 方法1: 讲每个节点的指针指向前面就可以. /** ...
 - [Leetcode] Reverse linked list ii 反转链表
		
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given1->2 ...
 - leetcode——Reverse Linked List II 选择链表中部分节点逆序(AC)
		
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1-> ...
 - 翻转单链表    leetcode  Reverse Linked List
		
翻转一个单链表.这个题目听说很多次了,总感觉肯定不是什么难题. 现在真的有点好高骛远了!总感觉那种很难的算法题才是难题,这种题没必要做.其实眼高手低啊. 这种easy题,我都不能一遍ac,这遇到白板编 ...
 
随机推荐
- dotnetcore Http服务器研究(一)
			
自从dotnet core 诞生以来,发展非常强势.我们总有些需要写一个独立的http服务器的需求,我想是时候忘记httplistener 了. dotnet framework 时代建一个小的htt ...
 - 推荐vim学习教程--《Vim 练级手册》
			
非常不错的vim学习资源,讲解的简单明了,可以作为速查工具,在忘记时就翻下.地址如下: <Vim 练级手册>
 - appium定位
			
一.链接基本信息 二.在appium界面中 三,定位 三.通过ui automator viewer抓取手机页面元素,点击红框按钮会抓取当前手机界面app全部元素;路径在sdk>tools下面的 ...
 - Scanner,Random,匿名对象-------------------java基础学习第七天
			
1.API 2.Scanner 功能:通过键盘输入数据到程序中. 引用类型的一般使用步骤: 导包 Import 包路径.类名称 只有java.lang 包写的类不需要导包,其他都需要 2.创建 类名称 ...
 - Java课堂笔记(零):内容索引
			
回想自己学习和使用Java的时间也是很长了.本科期间课堂上浅尝辄止地学习了点皮毛,后来也是搁置不用,未曾深入研究.研究生期间因为项目和实习的原因,基本算是重新拾起Java这门语言,并且接触到了Spri ...
 - go语言指针理解
 - React 之 JSX
			
开发完了一个项目了才回来研究React 一系列的技术,算是对自己的一个提高吧,也是小公司程序员的无奈. JSX是什么? JSX是javascript的语法的扩展. 为什么使用JSX? 1.React ...
 - Three.js学习笔记02
			
1.改变相机的位置,让物体移动 通过下面的代码改变相机的位置: camera.position.x =camera.position.x +1; 将相机不断的沿着x轴移动1个单位,也就是相机向右移动. ...
 - [编译] 4、在Linux下搭建nRF51822的开发烧写环境(makefile版)
			
星期日, 09. 九月 2018 07:51下午 - beautifulzzzz 1.安装步骤 1) 从GNU Arm Embedded Toolchain官网下载最新的gcc-arm工具链,写文章时 ...
 - [Swift]LeetCode447. 回旋镖的数量 | Number of Boomerangs
			
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...