Java对链表的操作

简介:

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);
 }
}





















本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366793,如需转载请自行联系原作者


相关文章
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
95 3
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
346 0
|
存储 Java
|
存储 Java
【Java集合类面试十】、HashMap中的循环链表是如何产生的?
在多线程环境下,HashMap在扩容时如果发生条件竞争,元素的插入顺序可能形成循环链表,导致死循环。
|
存储 Java
java实现双向链表的增删改查
这篇文章展示了如何在Java中实现双向链表的增加、删除、修改和查询操作,并通过代码示例演示了在双向链表中存储和操作学生信息的过程。
|
存储 Java
java实现单链表的创建、增、删、改、查
这篇文章详细介绍了Java中如何实现单链表的创建以及对单链表进行增加、删除、修改、查询等操作的方法,并提供了相应的代码示例。
java实现单链表的创建、增、删、改、查
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
191 0
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
141 0
|
存储 Java 索引
Java ArrayList操作指南:如何移除并返回第一个元素
通过上述方法,你可以方便地从Java的 `ArrayList` 中移除并返回第一个元素。这种操作在日常编程中非常常见,是处理列表时的基本技能之一。希望这篇指南能帮助你更好地理解和运用Java的 `ArrayList`。
191 4