zoukankan      html  css  js  c++  java
  • Implement LinkedList Class

      1 public class Solution
      2 {
      3   public static void main(String[] args)
      4   {
      5     // 1 --> 2 --> 3 --> 5 --> 4 --> 6 --> 0 --> null
      6     // 0     1     2     3     4     5     6
      7     MyLinkedList l = new MyLinkedList();
      8 
      9     l.addHead(5);
     10     l.addHead(3);
     11     l.addHead(2);
     12     l.addHead(1);
     13     l.addTail(4);
     14     l.addTail(6);
     15     l.addTail(0);
     16 
     17     ListNode head = l.head;
     18     while (head != null) {
     19       System.out.print(head.value + " -> ");
     20       head = head.next;
     21     }
     22 
     23     System.out.println();
     24     System.out.print(l.get(1) + " , ");
     25     System.out.print(l.get(0) + " , ");
     26     System.out.print(l.get(5) + " , ");
     27     System.out.print(l.get(6) + " , ");
     28 
     29     System.out.println();
     30 
     31     l.remove(2);
     32     l.remove(5);
     33     head = l.head;
     34     while (head != null) {
     35       System.out.print(head.value + " -> ");
     36       head = head.next;
     37     }
     38 
     39     System.out.println();
     40     l.removeVal(4);
     41     l.removeVal(5);
     42 
     43     head = l.head;
     44     while (head != null) {
     45       System.out.print(head.value + " -> ");
     46       head = head.next;
     47     }
     48   }
     49 }
     50 
     51 
     52 public class ListNode {
     53     int value;
     54     ListNode next;
     55     // ListNode prev;
     56     public ListNode(int value) {
     57         this.value = value;
     58     }
     59 }
     60 
     61 public class MyLinkedList {
     62     public ListNode head;
     63     public ListNode tail;
     64     public int length;
     65     
     66     public MyLinkedList() {
     67         head = null;
     68         tail = null;
     69         length = 0;
     70     }
     71 
     72     public void addHead(int value) {
     73         ListNode newHead = new ListNode(value);
     74         newHead.next = head;
     75         head = newHead;
     76         if (length == 0) {  // records previous node number
     77             tail = head;
     78         }
     79         length++;
     80     }
     81     
     82     public void addTail(int value) {
     83         ListNode newTail = new ListNode(value);
     84      if (length == 0) {
     85           head = newTail;
     86      } else {
     87        tail.next = newTail; 
              // newTail.prev = tail;
    88      } 89     tail = newTail; 90     length++; 91 } 92 93 public Integer get(int index) { // Zero based 94 if (index < 0 || index >= length) { 95 return null; 96 } 97 ListNode cur = head; 98 // 1 → 2 → 3 → 4 → 99 // 0 1 100      // 0 1 2 101      for (int i = 0; i < index; i++) { 102 cur = cur.next; 103 } 104 return cur.value; 105 } 106 107 public void remove(int index) { 108 if (index < 0 || index >= length) { 109 return; 110 } 111 // 1 → 2 → 3 → 4 → 112 // 0 1 113      // 0 1 2 114      if (index == 0) { 115      if (length == 1) { // It cannot be length = 0, because index = length has been filtered out! 116      tail = null; 117      } 118      head = head.next; 119      } else { 120        ListNode prev = head; 121      for (int i = 0; i < index - 1; i++) { 122     prev = prev.next; 123      } 124   //What if index is the position of tail node? 125     if (prev.next == tail) { // ← Or index == length - 1 126     tail = prev; 127     } 128     prev.next = prev.next.next; 129     } 130     length--; 131 } 132 133 134 //Remove first value val, not index 135 public ListNode removeVal(int val) { 136 if (head == null) { 137 return null; 138 } 139 ListNode cur = head; 140 if (head.value == val) { 141 head = head.next; 142 length--; 143 return cur; 144 } 145 146 ListNode prev = null; 147 while (cur != null) { 148 if (cur.value == val) { 149 prev.next = prev.next.next; 150 cur.next = null; 151 length--; 152 return cur; 153 } 154 prev = cur; 155 cur = cur.next; 156 } 157 return null; 158 } 159 160 public int size() { 161 return length; 162 } 163 }
  • 相关阅读:
    Flask基础(10)-->http的无状态协议解决办法一(客户端cookie)
    Flask基础(09)-->请求勾子函数
    Flask基础(08)-->错误捕获(异常捕获)
    Flask基础(07)-->正则自定义转换器
    Flask基础(06)-->视图常用逻辑
    zabbix报警-邮件-钉钉
    Flask实战第68天:项目上线部署
    查看Linux系统资源占用
    Flask实战第67天:Flask+Celery实现邮件和短信异步发送
    Flask实战第66天:celery实现异步任务
  • 原文地址:https://www.cnblogs.com/mayinmiao/p/8611812.html
Copyright © 2011-2022 走看看