zoukankan      html  css  js  c++  java
  • java模拟实现单向链表

    直接上代码

      1 package com.bjpowernode.test.datastructure;
      2 
      3 public class Mylinked {
      4 
      5       Node first;//头结点
      6 
      7       int size;//链表的长度
      8 
      9     public void add(Object value) {
     10         Node newNode = new Node(value);
     11         if (first == null) {
     12             first = newNode;
     13         } else {
     14             Node tmp = first;//当前节点
     15             while(tmp.getNext() != null) {
     16                 tmp = tmp.getNext();
     17             }
     18             //设置最后一个元素的下一个引用
     19             tmp.setNext(newNode);
     20         }
     21         size++;
     22     }
     23 
     24     public void add(Object value,int index) {
     25         Node newNode = new Node(value);
     26         if (index > size - 1) {
     27             //插入链表最后的元素
     28             add(value);
     29         } else {
     30             //在已有的元素之间插入
     31             Node oldnode = first;//头节点,从头结点开始遍历,得到目标位置的元素,后面需要把新节点的next指向它
     32             Node pre = first;//目标节点的上一节点
     33             for (int i = 0; i < index; i++) {
     34                 if (i == index - 1) {
     35                     pre = oldnode;
     36                 }
     37                 oldnode = oldnode.getNext();
     38             }
     39             //需要把上一个节点的next引用指向自己,自己的下一引用指向下一节点
     40             pre.setNext(newNode);
     41             newNode.setNext(oldnode);
     42             size++;
     43         }
     44     }
     45     public Object get(int index) {
     46         Node tmp = first;//当前节点
     47         for (int i = 0; i < index; i++) {
     48             tmp = tmp.getNext();
     49         }
     50         return tmp.getValue();
     51     }
     52     public void remove(int index) {
     53         if (index > size - 1) {
     54             //没有节点
     55             return;
     56         }
     57         if (index == 0) {
     58             //删除头元素
     59             first = first.getNext();
     60         } else {
     61             //找到删除元素的头一个元素
     62             Node tmp = first;//当前节点
     63             for (int i = 0; i < index - 1; i++) {
     64                 tmp = tmp.getNext();
     65             }
     66             tmp.setNext(tmp.getNext().getNext());
     67             size--;
     68         }
     69     }
     70     public void remove(Object obj) {
     71         if (size > 0) {
     72             Node tmp = first;
     73             int k = 0;//表示循环了几次才找到目标对象
     74             while (!tmp.getValue().equals(obj)) {
     75                 tmp = tmp.getNext();
     76                 k++;
     77             }
     78             if (size == 1) {
     79                 tmp = null;
     80             } else {
     81                 Node node = tmp.getNext();
     82                 //需要找到tmp的上一个节点
     83                 Node preNode = first;
     84                 for (int i = 1; i < k; i++) {
     85                     preNode = preNode.getNext();
     86                 }
     87                 preNode.setNext(node);
     88             }
     89             size--;
     90         }
     91 
     92     }
     93     class Node {
     94 
     95         private Node next;//下一节点的引用
     96 
     97         private Object value;//结点值
     98 
     99         public void setNext(Node next) {
    100             this.next = next;
    101         }
    102 
    103         public void setValue(Object value) {
    104             this.value = value;
    105         }
    106         public Node(Object value) {
    107             this.value = value;
    108         }
    109 
    110         public Node getNext() {
    111             return next;
    112         }
    113 
    114         public Object getValue() {
    115             return value;
    116         }
    117     }
    118 
    119     int length() {
    120         return size;
    121     }
    122 }
    123 class Main {
    124 
    125     public static void main(String[] args) throws Exception {
    126         Mylinked mylinked = new Mylinked();
    127         mylinked.add("a");
    128         mylinked.add("b");
    129         mylinked.add("c");
    130         mylinked.add("d");
    131         mylinked.add("e");
    132 
    133         System.out.println(mylinked.get(0));
    134         System.out.println(mylinked.get(1));
    135         System.out.println(mylinked.get(2));
    136         System.out.println(mylinked.get(3));
    137         System.out.println(mylinked.get(4));
    138         mylinked.add("f", 2);
    139         //  mylinked.remove(5);
    140         mylinked.remove("e");
    141 
    142 
    143     }
    144 }
  • 相关阅读:
    P2082 区间覆盖(加强版)
    Java基础
    @import
    POST方式"Content-type"是"application/x-www-form-urlencoded 的请求遇到的问题
    VBox 安装 macOS 10.12
    对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
    window.location 属性
    post get 区别
    vue 生命周期
    记事本
  • 原文地址:https://www.cnblogs.com/hkdpp/p/11813982.html
Copyright © 2011-2022 走看看