面向对象先生

导航

链表_JAVA实现

链表_JAVA实现

1.ListNode.JAVA

/**
*
*/
基本数据结构;

/**
* @author greatwqs
*
*/
public class ListNode {
Object data;
ListNode next;

ListNode(Object d) {
   data = d;
   next = null;
}

}

2.链表的类MyList.JAVA

 

基本数据结构;

/**
* @author greatwqs
*
*/
public class MyList {
// 用变量来实现表头
private ListNode Head = null;

private ListNode Tail = null;

private ListNode Pointer = null;

private int Length = 0;

/** 清空整个链表 */
public void deleteAll() {
   Head = null;
   Tail = null;
   Pointer = null;
   Length = 0;
}

/** 链表复位,使第一个结点 成为当前结点 */
public void reset() {
   Pointer = null;
}

/** 判断链表是否为空 */
public boolean isEmpty() {
   return (Length == 0);
}

/** 判断当前结点是否 为最后一个结点 */
public boolean isEnd() {
   if (Length == 0)
    throw new java.lang.NullPointerException();
   else if (Length == 1)
    return true;
   else
    return (cursor() == Tail);
}

/** 返回当前结点的下一个结点的值, 并使其成为当前结点 */
public Object nextListNode() {
   if (Length == 1)
    throw new java.util.NoSuchElementException();
   else if (Length == 0)
    throw new java.lang.NullPointerException();
   else {
    ListNode temp = cursor();
    Pointer = temp;
    if (temp != Tail)
     return (temp.next.data);
    else
     throw new java.util.NoSuchElementException();
   }
}

/** 返回当前结点的值 */
public Object currentListNode() {
   ListNode temp = cursor();
   return temp.data;
}

/** 在当前结点前插入一个结点, 并使其成为当前结点 */
public void insert(Object d) {
   ListNode e = new ListNode(d);
   if (Length == 0) {
    Tail = e;
    Head = e;
   } else {
    ListNode temp = cursor();
    e.next = temp;
    if (Pointer == null)
     Head = e;
    else
     Pointer.next = e;
   }
   Length++;
}

/** 返回链表的大小 */
public int size() {
   return (Length);
}

/**
* 将当前结点移出链表,下一个结点成为当前结点, 如果移出的结点是最后一个结点,则第一个结点成为当前结点
*/
public Object remove() {
   Object temp;
   if (Length == 0)
    throw new java.util.NoSuchElementException();
   else if (Length == 1) {
    temp = Head.data;
    deleteAll();
   } else {
    ListNode cur = cursor();
    temp = cur.data;
    if (cur == Head)
     Head = cur.next;
    else if (cur == Tail) {
     Pointer.next = null;
     Tail = Pointer;
     reset();
    } else
     Pointer.next = cur.next;
    Length--;
   }
   return temp;
}

/** 返回当前结点的指针 */
private ListNode cursor() {
   if (Head == null)
    throw new java.lang.NullPointerException();
   else if (Pointer == null)
    return Head;
   else
    return Pointer.next;
}
}


3,链表的测试类MyListTest.JAVA

/**
*
*/
基本数据结构;

import java.io.IOException;

/**
* @author greatwqs
*
*/
public class MyListTest {

public static void main(String[] args) {
   MyList a = new MyList();
   for (int i = 1; i <= 10; i++)
    a.insert(new Integer(i));
   System.out.println(a.currentListNode());
   while (!a.isEnd())
    System.out.println(a.nextListNode());
   a.reset();
   while (!a.isEnd()) {
    a.remove();
   }
   a.remove();
   a.reset();
   if (a.isEmpty())
    System.out.println("There is no ListNode in List \n");
   System.out.println("You can press return to quit\n");
   try {
    // 确保用户看清程序运行结果
    System.in.read();
   } catch (IOException e) {
   }
}
}
===========================================

运行结果显示

==========================================

10
9
8
7
6
5
4
3
2
1
There is no ListNode in List

You can press return to quit

 

posted on 2009-12-07 17:57  面向对象先生  阅读(936)  评论(0)    收藏  举报