栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实战:双向链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实战:双向链表

import java.util.*;

import static java.lang.Math.*;
//双向链表
public class MylinkedList {

  private class Node{
    E element;
    Node prev;
    Node next;
    //带参数构造方法
    public Node(E element){
      this.element=element;
    }
  }
  private Node first;
  private  Node last;
  private int count;
  //向集合中添加元素
  public void add(E element){
    Node node=new Node(element);
    if(this.count==0){
      this.first=node;
    }else {
      this.last.next=node;
      node.prev=this.last;
    }
    this.last=node;
    count++;
  }
  //指定位置向集合中添加元素
  public void add(int index,E element){
    Node node=new Node(element);
   if(index>count){
     System.out.print("超出链表长度");
   }else if(index==0){
     this.first.prev=node;
     node.next=this.first;
     this.first=node;
   }else if(count==index){
     this.last.next=node;
     node.prev=this.last;
     this.last=node;
   }else{
     Node target=getNode(index);
     node.next=target;
     node.prev=target.prev;
     target.prev.next=node;
     target.prev=node;
   }
   count++;
  }

  //删除指定下标的元素
  public E remove(int index){
    Node node=getNode(index);
    removeNode(node);
    return  node.element;
  }
 //根据节点中数据进行删除
  public boolean remove(E element){
    Node node=new Node(element);
    if (node==null){
      return  false;
    }
    removeNode(node);
    return true;
  }
  //根据元素获取节点
  private Node getNode(E element){
    Node node=this.first;
    while(node!=null){
      if (node.element.equals(element)){
        return  node;
      }
      node=node.next;
    }
    return null;
  }
  //清空链表
  public void clear(){
    this.first=null;
    this.last=null;
    count=0;
  }
  //将链表中指定下标节点的元素值,修改为指定的值
  public E set(int index,E element){
   Node node=getNode(index);
   E ele=node.element;
   node.element=element;
   //返回修改之前的元素值
   return ele;
  }
  private void removeNode(Node node) {
    if (count==1){
      this.first=null;
      this.last=null;
      count--;
      return;
    }
    if (node==this.first){
      this.first=this.first.next;
      //头节点的前一个的下一个
      this.first.prev.next=null;
      this.first.prev=null;
    }else if(node==this.last){
      this.last=this.last.prev;
      this.last.prev.next=null;
      this.last.next=null;
    }else{
      node.prev.next=node.next;
      node.next.prev=node.prev;
      node.next=null;
      node.prev=null;
    }
    count--;
  }

  //根据下标获取所需节点
  private Node getNode(int index) {
    if(index<0||index>count){
      throw  new IndexOutOfBoundsException("下表越界");
    }
    Node node=this.first;
    for(int i=0;i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459445.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号