Java对链表的操作

简介: class LinkList {  private class Node//创建节点类  {   public Object item;   public Node   next;  }  private Node head;  priva...


class LinkList
{
 private class Node//创建节点类
 {
  public Object item;
  public Node   next;
 }

 private Node head;
 private Node slider;
 private int  count;

 public LinkList()//构造方法
 {
  clear();
 }

 public void clear()//清空链表
 {
  head   = null;
  slider = null;
  count  = 0;
 }

 public boolean isEmpty()//判断链表是否为空
 {
  return head==null;
 }

 public void gotoFirst()//指向链表的头结点
 {
  slider = head;
 }

 public Object nextItem()//插入数据
 {
  if(slider==null)
  {
   return null;
  }

  Object o = slider.item;

  slider = slider.next;

  return o;
 }

 public Object getFirst()
 {
  return head.item;
 }

 public Object getAt(int index)
 {
  if(index<0 || index>=count)
  {
   return null;
  }

  Node g  = head;

  for(int i=0; i<index; i++)
  {
   g  = g.next;
  }

  return g.item;

 }

 public void addAt(Object item,int index)
 {
  Node g  = head;
  Node ag = head;

  if(index<0)
  {
   addFirst(item);
  }
  else
   if(index>=count)
  {
   addLast(item);
  }
  else
  {
   for(int i=0; i<index; i++)
   {
    if(g==ag)
    {
     g  = g.next;
    }
    else
    {
     ag = g;
     g  = g.next;
    }
   }

   if(index==0)
   {
    head      = new Node();
    head.item = item;
    head.next = g;
   }
   else
   {
    ag         = new Node();
    ag.item    = item;
    ag.next    = g;
   }

   count++;
  }
 }

 public Object removeAt(int index)
 {
  if(index<0 || index>=count)
  {
   return null;
  }

  Node g  = head;
  Node ag = head;

  for(int i=0; i<index; i++)
  {
   if(g==ag)
   {
    g  = g.next;
   }
   else
   {
    ag = g;
    g  = g.next;
   }
  }

  if(index==0)
  {
   head = head.next;
  }
  else
  {
   ag.next = g.next;
  }

  count--;

  return g.item;
 }

 public void addFirst(Object item)
 {
  Node g    = head;

  head      = new Node();
  head.item = item;
  head.next = g;

  count++;
 }

 public void addLast(Object item)
 {
  if(head==null)
  {
   head      = new Node();
   head.next = null;
   head.item = item;
  }
  else
  {
   Node s = head;

   for(int i=0; i<count; i++)
   {
    if(s.next == null)
    {
     break;
    }

    s = s.next;
   }


   s.next = new Node();
   s      = s.next;
   s.next = null;
   s.item = item;
  }

  count++;
 }

 public int length()
 {
  return count;
 }

 public Object removeFirst()
 {
  return removeAt(0);
 }

 public Object removeLast()
 {
  return removeAt(count-1);
 }
}

相关文章
|
3月前
|
Java
数组链表(java)
数组链表(java)
|
3月前
|
Java 数据处理 索引
JAVA中的插入操作:深入解析与实现
JAVA中的插入操作:深入解析与实现
47 1
|
3月前
|
存储 Java
Java 链接表(链表)详解与实现
Java 链接表(链表)详解与实现
36 2
|
4月前
|
存储 缓存 Java
Java中的链表
Java中的链表
19 0
|
4月前
|
存储 Java
Java 实现双链表
Java 实现双链表
22 0
|
4月前
|
存储 Java
Java 实现单链表
Java 实现单链表
28 0
|
4月前
|
存储 Java
Java链表
Java链表
27 0
|
4月前
|
存储 Java 索引
Java的数组结构
Java的数组结构
22 0
|
算法 Java 容器
JAVA中的红黑树
在开始讨论JAVA中的红黑树之前,就前几篇关于二叉树的文章做个总结。 平衡二叉树:高度差绝对值不超过1,任意节点左右子树均为平衡二叉树。 AVL树:平衡二叉树只是一个概念,AVL树,红黑树都是这个概念的落地实现。AVL树其实就是《手撕JAVA十三》一文中说的通过RR,RL,LL,LR旋转而成的平衡二叉树。这些旋转都属于AVL树的算法。
86 0
|
存储 Java 编译器
Java语言----LinkedList 和 链表的实现
Java语言----LinkedList 和 链表的实现
78 0