java单链表的应用 遍历、插入、删除

[/code][quote]java单链表的应用  遍历、插入、删除
[/quote]
[code="java"]package UseThread13;

/**
* 单链表的使用
*
* @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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值