zoukankan      html  css  js  c++  java
  • 4.23JavaLinkedList新增remove方法

    4.23JavaLinkedList新增remove方法

    方法:

    package com.MyCollection;

    /**
    * 自定义链表
    * 增加remove方法
    * @author Lucifer
    */
    public class LcfLinkedList03 {

       private Node first;

       private Node last;

       private int size;

       /*链表的remove方法---修改节点指向即可*/
       //根据索引值拿到节点,进行判断,如果节点不为空,把自己删掉。删掉的方法是它的上一个节点直接指向它的下一个节点
       public void remove(int index){
           //创建临时节点,将获取到的节点信息赋值给临时节点
           Node temp = getNode(index);
           //进行判断---考虑第一个元素
           if (temp != null){
               //创建两个对象代表节点
               Node up = temp.previous; //创建一个Node对象代表上一个节点
               Node down = temp.next; //创建一个Node对象代表下一个节点
               if (up != null){
                   up.next = down; //目标节点的上一个节点的尾节点直接指向目标节点的下一个节点
              }

               if (down != null){
                   down.previous = up; //等于空为第一个元素,就不做这样的操作了
              }
               /*
               如果是0号索引的元素,只会执行down != null这一句
               这样的话上一个指针就是null,所以要为头部和尾部单独写一个方法
                */
               //被删除的元素是第一个
               if (index == 0){
                   //头节点直接等于下一个尾节点
                   first = down;
              }
               
               //被删除的元素是最后一个
               if (index == size - 1){
                   //尾部节点等于上一个节点up
                   last = up;
              }
               size--;
          }
      }

       public void add(Object obj){
           Node node = new Node(obj);
           if (first == null){
               first = node;
               last = node;
          }else {
               node.previous = last;
               node.next = null;
               last.next = node;
               last = node;
          }
           size++;
      }

       public Object get(int index){
           if (index < 0 || index > size - 1){
               throw new RuntimeException("索引数字不合法" + index);
          }
           //调用下面封装好的重置方法
           Node temp = getNode(index); //index是方法定义的形参
           return temp != null ? temp.element : null;
      }

       /*封装重置方法便于调用*/
       //形参是索引值、返回值是元素数据本身、返回值是一个临时节点---方法包括:访问修饰符、返回值类型、形参、返回值
       public Node getNode(int index){
           Node temp = null;
           if (index <= (size >> 1)){
               temp = first;
               for (int i = 0; i < index; i++){
                   temp = temp.next;
              }
          }else {
               temp = last;
               for (int i = 0; i > index; i++){
                   temp = temp.next;
              }
          }
           return temp;
      }

       @Override
       public String toString(){
           StringBuilder sb = new StringBuilder("[");
           //TODO Auto-generated method stub
           Node temp = first;
           while (temp != null){
               sb.append(temp.element + ",");
               temp = temp.next;
          }
           sb.setCharAt(sb.length() - 1,']');
           return sb.toString();
      }

       public static void main(String[] args) {
           LcfLinkedList03 list = new LcfLinkedList03();

           /*使用add方法*/
           list.add("a");
           list.add("b");
           list.add("c");
           list.add("d");
           list.add("e");
           list.add("f");

           System.out.println(list);
           list.remove(3);
           System.out.println(list);
           list.remove(0);
           System.out.println(list);
           list.remove(list.size - 1);
           System.out.println(list);
      }
    }

     

    It's a lonely road!!!
  • 相关阅读:
    VC++:创建,调用Win32静态链接库
    VC++:创建,调用Win32动态链接库
    C++生成和解析XML文件
    C++实现16进制字符串转换成int整形值
    一个好隐蔽的C/C++代码bug
    【C++札记】标准模板库string
    Rabbitmq C++客户端 Rabbitmq Client
    C++:标准模板库map
    C++:标准模板库vector
    C++:标准模板库(STL)
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14695362.html
Copyright © 2011-2022 走看看