zoukankan      html  css  js  c++  java
  • leetcode

    1. 反转一个单链表。

      示例:

      输入: 1->2->3->4->5->NULL

      输出: 5->4->3->2->1->NULL

      /**
       * Definition for singly-linked list.
       */
      class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x; }
      }
      
      /**
       * 反转链表
       * 1. 遍历链表, 使用集合保存数据元素, 新声明一个链表, 遍历集合复制 时间复杂度是O(n)
       * 2. 声明两个链表, 直接反转(有种数组中两个元素交换的感觉)
       * <p>
       *     输入: 1->2->3->4->5->NULL
       *     输出: 5->4->3->2->1->NULL
       * <p/>
       * 执行用时 :0 ms, 在所有 java 提交中击败了100.00%的用户
       * 内存消耗 :37 MB, 在所有 java 提交中击败了45.52%的用户
       * @param head  链表头
       * @return
       */
      public static ListNode reverseList(ListNode head) {
          if(head == null) {
              return null;
          }
          ListNode cur = head,
                  pre = null,
                  temp = null;
          while(cur != null) {
              temp = cur.next;
              cur.next = pre;
              pre = cur;
              cur = temp;
          }
          return pre;
      }
      
      /**
       * 执行用时 :3 ms, 在所有 java 提交中击败了 7.38%的用户
       * 内存消耗 :36.8 MB, 在所有 java 提交中击败了50.79% 的用户
       * @param head
       * @return
       */
      public static ListNode reverseList1(ListNode head) {
          if(head == null) {
              return null;
          }
          List<Integer> list = new ArrayList<>();
          while(head != null) {
              list.add(0,head.val);
              head = head.next;
          }
          ListNode result = new ListNode(list.get(0));
          ListNode temp = result;
          for (int i = 1; i < list.size(); i++) {
              ListNode node = new ListNode(list.get(i));
              result.next = node;
              result = node;
          }
          return temp;
      }
      
      // 测试
      ListNode node1 = new ListNode(1);
      ListNode node2 = new ListNode(2);
      ListNode node3 = new ListNode(3);
      ListNode node4 = new ListNode(4);
      ListNode node5 = new ListNode(5);
      node1.next = node2;
      node2.next = node3;
      node3.next = node4;
      node4.next = node5;
      node5.next = null;
      ListNode node = reverseList(node1);
      while (node != null) {
          System.out.println(node.val);
          node = node.next;
      }
      
  • 相关阅读:
    Maven安装以及Idea安装
    EasyUi和jQuery模拟后台管理页面
    EasyUI初级入门2
    EasyUI初级入门
    JS高级
    好用的表单验证工具 vuelidate
    为页面/接口添加加载进度条
    Nuxt.js(二、解决首屏速度与SEO)
    Nuxt 的介绍与安装
    Axios及其async await封装
  • 原文地址:https://www.cnblogs.com/wadmwz/p/11725379.html
Copyright © 2011-2022 走看看