zoukankan      html  css  js  c++  java
  • 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);
     }
    }

  • 相关阅读:
    golang 数据结构 优先队列(堆)
    leetcode刷题笔记5210题 球会落何处
    leetcode刷题笔记5638题 吃苹果的最大数目
    leetcode刷题笔记5637题 判断字符串的两半是否相似
    剑指 Offer 28. 对称的二叉树
    剑指 Offer 27. 二叉树的镜像
    剑指 Offer 26. 树的子结构
    剑指 Offer 25. 合并两个排序的链表
    剑指 Offer 24. 反转链表
    剑指 Offer 22. 链表中倒数第k个节点
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211490.html
Copyright © 2011-2022 走看看