单链表
单链表的结构是前一级的NEXT域
指向下一级的头节点,连接成为一个单链表,如图所示。
第一个节点 头节点不储存信息。最后一个节点没有NEXT域。
每个节点的NEXT只是用来指向下一个节点,一级一级往下传递。
上部分用来存储信息。
比如 b=a.next; c=b.next.
单链表结构的插入(头插,尾插,指定位置插入);查找;删除;
首先定义一个Entry类
package com.tulun.src1;
class Entry<T>{//定义单链表结构
private T value;
private Entry next;
public Entry(){
next=null;
}
public Entry(T value){
this.value=value;
this.next=null;
}
}
然后在Entry类中实现各种操作(增删补差等。。)
class MyLinedList<T> {
private Entry head; //头节点
private int size; //单链表的长度
public MyLinedList() {
head=new Entry();
}
public void insertHead(T value) {//头节点插入,先连接后面的,防止断掉
Entry entry=new Entry();
entry.next=head.next;
head.next=entry;
}
public void insertTail(T value) {//尾节点插入
Entry entry=new Entry();
Entry i;
for (i=head; i.next == null; i=i.next) {
i.next=entry;
}
}
public void insert(int pos, T value) {//按位置插入,先判断位置是否合理
if (pos < 1 || pos > size - 1) {
return;
}
Entry entry=new Entry();//新节点
entry.value=(Comparable) value;
int i;
Entry n=head;
for (i=0; i < pos - 1; i++) {
n=n.next;
}
entry.next=n.next;
n.next=entry;
}
public int getSize(Entry a) {//获得单链表的长度
int count=0;
for (Entry entry=head.next; entry != null; entry=entry.next) {
count++;
size=count;
}
return size;
}
public void remove(T value) {//删除指定的元素,value
for (Entry entry=head.next; entry != null; entry=entry.next) {
if (entry.next.value == value) {//如果存在指定元素
Entry p=entry.next;
entry.next=p.next;
p.value=null;
break;
} else {//不存在指定的元素
return;
}
}
}
public boolean circle() {//判断单链表是否有环
Entry p=new Entry();
Entry q=new Entry();
while (p != null && q != null) {
p=p.next;
q=p.next.next;
if (q == p) {
return true;
}
}
return false;
}
}
// {//判断是否有环??
// Entry p=head.next;
// Entry q=head.next;
// for (Entry entry=head.next;entry!=null;entry=entry.next){
// p=p.next;
// q=q.next.next;
// if (p==q){
// return true;
// }
// }
// return false;
// }