zoukankan      html  css  js  c++  java
  • 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));
        }
    
    }
    
  • 相关阅读:
    sql 修改字段小记
    (转)web.config 为某个单独页面设置编码格式
    gb2312编码提交url乱码解决
    Windows 8上强制Visual Studio以管理员身份运行
    new、delete用法(一)
    把varchar转换为int 然后进行排序
    linq 整体修改字段
    游标用法
    分组并赋值
    读取xml
  • 原文地址:https://www.cnblogs.com/sunshine-2015/p/7774920.html
Copyright © 2011-2022 走看看