定义:链表是一种递归的数据结构,它或者为空,或者是指向一个结点的引用,该结点含有一个泛型的元素和一个指向另一条链的引用。
结点的构造
结点的构造,我们包括了对数据域和指针域的构造,当然如果需要用到多种数据,也可以构造多个数据域,也就形成了多元链表。
package LinkList;
public class Node<T> {
public T data;
public Node<T> next;
// 带一个参数的构造函数
public Node(T data)
{
this.data = data;
}
public Node(T data,Node<T> next)
{
this.data = data;
this.next = next;
}
public Node(){
this(null,null);
}
}
链表的基本方法构造
链表方法的构造包括了一些对整条链表的数据的清除、判空、长度的判断、插入‘删除等基本操作。
public Node<T> head;
public LinkList()
{
head = new Node<T>();
}
public void clear() { // 清空单链表的方法
// TODO Auto-generated method stub
head.data = null;
head.next = null;
}
public boolean isEmpty(){
return head.next==null;
}
public int length() { // 计算单链表的长度
// TODO Auto-generated method stub
Node<T> p = head.next;
int length = 0;
while(p!=null)
{
p = p.next;
++length;
}
return length;
}
public T get(int i) throws Exception { // 获取第i个位置的值
// TODO Auto-generated method stub
Node<T> p =head.next;
int j = 0;
while(p!=null&&j<i) {
p = p.next;
++j;
}
if(j>i||p==null)
{
throw new Exception("第"+i+"个元素不存在");
}
return p.data;
}
public void insert(int i,T x)throws Exception{ //将一个数插入链表中
Node<T> p = head;
int j=-1;
while(p.next!=null&&j<i-1) {
p=p.next;
++j;
}
if(j>i-1||p==null)
throw new Exception("插入位置不合法");
Node<T> s=new Node<T>(x);
s.next=p.next;
p.next=s;
}
public void remove(int i)throws Exception{ // 删除i处的值
Node<T> p=head;
int j=-1;
while(p!=null&&j<i-1) {
p=p.next;
j++;
}
if(j>i-1||p==null)
throw new Exception("删除位置不合法");
p.next=p.next.next;
}
public int indexOf(T x) { // 获取该值的单链表中的位置
// TODO Auto-generated method stub
Node<T> p = head.next;
int j=0;
while(p!=null&&!p.data.equals(x)) {
p=p.next;
++j;
}
if(p!=null)
return j;
else
return -1;
}
public void display() { // 对整条链表数据的打印
Node<T> node=head.next;
while (node!=null) {
System.out.print(node.data+" ");
node=node.next;
}
System.out.println();
}
这些方法都是对链表的最基本应用,在后续的运用链表中都会大方面的运用到这些方法。