/** * 单链表的使用 * * @author Administrator * */ public class Manage { private java.util.List<Link> list = new java.util.ArrayList<Link>(); private Link next; private Link root;
// 主函数 public static void main(String args[]) { Manage sl = new Manage(); int n = 10; sl.showMessage(n); }
/** * 实现链表对象的连接起来,并且遍历整个链表 * * @param 链表的长度(包括链表头) */ public void showMessage(int len) { int n = 1;
root = new Link();// 链表头 list.add(root); while (n <= len) { Link link = new Link(); list.add(link); // 初始化链表中的数据 link.setDate("我是链表中的第" + n + "个对象"); // 实现链表之间的相互连接 if (n == 1) { root.setNextLink(link);// 连接链表头 next = link; } else { next.setNextLink(link); next = link; } n++; }
// delOneLink(3); addLink(2); // 打印链表对象中的数据 Link lin = root.getNextLink();// 链表头下的第一个链表对象 while (lin != null) { System.out.println(lin.getDate());// 打印出链表中的数据 lin = lin.getNextLink(); } addLink(3); // 打印链表对象中的数据 Link li = root.getNextLink();// 链表头下的第一个链表对象 while (li != null) { System.out.println(li.getDate());// 打印出链表中的数据 li = li.getNextLink(); } }
/** * 删除链表中的某个对象 * * @param n * 指定要删除的对象 */ public void delOneLink(int n) {// n从1开始(指的是链表中的第几个位置,包括表头) if (n == 1) { root.setNextLink(list.get(n + 1)); list.remove(n);// 删链表头后的第一个 } else if (n == list.size() - 1) { list.remove(n);// 删除最后的一个 } else { Link one = list.get(n - 1); Link two = list.get(n + 1); one.setNextLink(two); list.remove(n); }
}
/** * 在指定的位置插入某个链表对象 * * @param n * 插入的位置 */ public void addLink(int n) {// n从1开始(指的是链表中的第几个位置),以插在指定位置的前面为准 if (n > list.size()) { System.out.println("指定位置超过范围了!"); } else { if (n == 1) {// 在第一个位置的前面插入 Link link = new Link(); link.setDate("我是在第" + n + "位插入的链表对象"); if (list.size() == 1) { root.setNextLink(link); } else { root.setNextLink(link); link.setNextLink(list.get(n)); }
// 重新整理这个队列 java.util.List<Link> newlist = new java.util.ArrayList<Link>(); newlist.add(root); newlist.add(link); for (int i = 2; i < list.size(); i++) { newlist.add(list.get(i)); } for (int j = 0; j < list.size(); j++) { list.remove(0); } list = newlist; } else { Link link = new Link(); link.setDate("我是在第" + n + "位插入的链表对象"); list.get(n - 1).setNextLink(link); link.setNextLink(list.get(n)); // 重新整理这个队列 java.util.List<Link> newlist = new java.util.ArrayList<Link>(); for (int i = 0; i < n; i++) { newlist.add(list.get(i)); } newlist.add(link); for (int j = n; j < list.size(); j++) { newlist.add(list.get(j)); } list = newlist; } } } }
package UseThread13;
/** * 每一个链节点都是一个链表对象 * * @author Administrator * */ public class Link {
private Link next;// 下一个链表对象 private Object date;// 链表对象里放的数据
/** * 设定下一个链表对象 * * @param next * 要设的下一个链表对象 */ public void setNextLink(Link next) { this.next = next; } /** * 得到下一个链表对象 * * @return 要得到的链表对象 */ public Link getNextLink() { return next; } /** * 给链表对象放入一定的数据 * @param date 链表对象中要放入的数据 */ public void setDate(Object date) { this.date = date; } /** * 得到链表对象中的数据 * @return 要得到的数据 */ public Object getDate(){ return date; } }