java实现单链表的难度关键在于插入。下面是我用java实现单链表的过程,着重介绍一下插入的实现与原理。
在实现插入前,首先新建一个Node类,这个类的主要成员变量为Element与next。
代码如下:
package list;
public class Node {
private Object element;
private Node next;
public Node() {
// TODO Auto-generated constructor stub
}
public Node(Object element){
this.element = element;
}
public Node(Object element,Node next){
this.element = element;
this.next = next;
}
public Object getElement() {
return element;
}
public void setElement(Object element) {
this.element = element;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
然后实现insert方法,在实现insert的过程中,关键点在于先循环找到插入位置i之前的节点i-1,然后新建节点的指针指向i,将i-1的指针指向新建节点
代码如下:
public void inset(int i, Object x) throws Exception {
Node p = head;
int j = 0;
while (p!=null&&j<i-1) {
// 循环直到p为第i-1个节点
p = p.getNext();
j++;
}
// 添加新节点,先得到p后的节点地址赋值给node.next;再将node地址赋值给p.next;
Node node = new Node(x);
node.setNext(p.getNext());
p.setNext(node);
}
这样,就实现了单链表中的插入方法,接下来是单链表的建表。单链表的建表分为头插法和尾插法。下面分别实现头插法与尾插法。
在头插法建表过程中,只要把insert方法中的插入位置i设为0即可。
代码如下:
public Node headCreate(int n) throws Exception {
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < n; i++) {
// 读入n个object,将其用头插法插入单链表
inset(1, scanner.next());
}
scanner.close();
return head;
}
在尾插法建表过程中,只要把insert方法中的插入位置i设为读入顺序即可
代码如下
public Node tailCreate(int n) throws Exception {
Scanner scanner = new Scanner(System.in);
for (int i = 1; i <= n; i++) {
// 读入n个object,将其按读入顺序依次插入
inset(i, scanner.next());
}
scanner.close();
return head;
}
下面是源码的链接 http://download.youkuaiyun.com/detail/bigevil/8563675