zoukankan      html  css  js  c++  java
  • 206. Reverse Linked List

    题目:

    Reverse a singly linked list.

    链接: http://leetcode.com/problems/reverse-linked-list/

    题解:

    反转单链表,必须做得非常熟练。这个method将会是许多复杂题目的一个组成部分。

    Time Complexity - O(n), Space Complexity - O(1)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode reverseList(ListNode head) {
            if(head == null || head.next == null)
                return head;
            ListNode dummy = new ListNode(-1);
            
            while(head != null) {
                ListNode tmp = head.next;
                head.next = dummy.next;
                dummy.next = head;
                head = tmp;
            }
            
            return dummy.next;
        }
    }

    二刷:

    就是做一个fakehead,然后在head != null的情况下进行翻转。

    Java:

    Time Complexity - O(n), Space Complexity - O(1)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode reverseList(ListNode head) {
            ListNode dummy = new ListNode(-1);
            ListNode tmp = dummy;
            while (head != null) {
                tmp = head.next;
                head.next = dummy.next;
                dummy.next = head;
                head = tmp;
            }
            return dummy.next;
        }
    }

    Reursive:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode reverseList(ListNode head) {
            if (head == null || head.next == null) {
                return head;
            }
            ListNode nextNode = head.next;
            ListNode newHead = reverseList(nextNode);
            nextNode.next = head;
            head.next = null;
            return newHead;
        }
    }

    三刷:

    ListNode tmp的定义放在循环里其实也就是创建一个reference,这个reference只是为了寻址,在32位机器上是32-bits,在64位机器上是64-bits,但有的JVM可以支持在64位机器上使用32位的bit。所以我们放在循环外的话可以重复使用。否则假如这个链表的长度为,我们在循环内每次都创建新reference的话,要使用len - 1个reference。

    Java:

    Time Complexity - O(n), Space Complexity - O(1)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode reverseList(ListNode head) {
            ListNode dummy = new ListNode(-1);
         ListNode tmp = null;
    while (head != null) { tmp = head.next; // reference to head.next head.next = dummy.next; dummy.next = head; head = tmp; } return dummy.next; } }

    Reference:

    https://leetcode.com/discuss/34474/in-place-iterative-and-recursive-java-solution

    https://leetcode.com/discuss/40956/my-java-recursive-solution

  • 相关阅读:
    python的json模块介绍
    采用boosting思想开发一个解决二分类样本不平衡的多估计器模型
    kappa系数
    android服务
    Android Studio 无法预览布局问题:com/android/util/PropertiesMap
    pitch yaw roll是什么
    keil5破解
    Eclipse/jre/jdk/jvm
    传感器
    Java静态代码块
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4493546.html
Copyright © 2011-2022 走看看