- 单链表
SignleLinkList类--定义单链表
package cn.yundylan.collection;
//单链表的创建以及操作
public class SignleLinkList {
private SignleNode first;
private SignleNode last;
private int size;
//单链表中增加节点
public void add(Object obj)
{
//判断第一个节点是否为空
if(first==null)
{
SignleNode n = new SignleNode();
n.setObj(obj);
n.setNext(null);
first = n;
last = n;
size++;
}
//链表已经存在,在末端插入一个节点
else
{
SignleNode n = new SignleNode();
n.setObj(obj);
n.setNext(null);
last.setNext(n);
last = n;
size++;
}
}
//单链表中删除一个节点
public void remove(Object obj)
{
//删除第一个节点
if(first.getObj() == obj)
{
first = (SignleNode)first.getNext();
}
//删除最后一个节点
else if(last.getObj()==obj)
{
SignleNode p = (SignleNode)first.getNext();
while(p.getNext()!=last)//循环找到last前面的一个节点
p =(SignleNode) p.getNext();
p.setNext(null);
}
//删除中间节点
else
{
SignleNode p = (SignleNode)first.getNext();
while(p.getObj()!=obj)//循环找到需要删除的那个节点
{
p =(SignleNode) p.getNext();
}
System.out.println(p.getObj());
SignleNode q = first;//定义一个新的节点 找到删除节点的前一个节点
while(q.getNext()!=p)
{
q = (SignleNode)q.getNext();
}
q.setNext(p.getNext());
}
}
public static void main(String[] args) {
SignleLinkList list =new SignleLinkList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.remove("c");
while(list.first!=null)
{
System.out.println(list.first.getObj());
list.first =(SignleNode)list.first.getNext();
}
}
}
SignleNode类--定义单链表结点
package cn.yundylan.collection;
//单链表中节点的定义
public class SignleNode {
private Object obj;
private Object next;
public SignleNode()
{
}
public Object getNext() {
return next;
}
public void setNext(Object next) {
this.next = next;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj)
{
this.obj = obj;
}
}
2.双向链表
LinkList类--定义双向链表
package cn.yundylan.collection;
/**
* 链表的实现以及操作
* @author Dylan
*
*/
public class LinkList {
// class LinkList *list;
private Node first;
private Node last;
private int size;
//在双链表中增加一个节点
public void add(Object obj)
{
//空链表
if(first==null)
{
Node n = new Node();//创建一个新节点
n.setPrevious(null);
n.setObj(obj);//给这个节点的obj字段赋值
n.setNext(null);
first = n;
last = n;
size++;
}
else
{
Node n = new Node();//创建一个新节点
n.setObj(obj);//给节点赋值
n.setNext(null);//节点增加在链表最末端,因此其后继节点为空
n.setPrevious(last);//当前增加的节点其前驱节点为当前链表的最后一个节点
last.next = n;
last = n;
size++;
}
}
//删除链表中的一个节点
public void remove(Object obj)
{
// Node n = new Node();
// n.setObj(obj);
Node temp1 = new Node();
Node temp2 = new Node();
if(first!=null)
{
if(first.obj==obj)
{
first = (Node)first.getNext();
first.setPrevious(null);
}
else if(last.obj==obj)
{
Node n = new Node();
n = (Node)last.getPrevious();
n.setNext(null);
}
else
{
Node p = (Node)first.getNext();
while(p!=last)//第一个节点不为空 循环链表找到元素为obj的节点进行删除
{
System.out.println("执行while语句");
System.out.println(p.getObj());
if(p.obj==obj)
{
temp1 = (Node)p.getNext();
temp2 = (Node)p.getPrevious();
temp2.setNext(temp1);
temp1.setPrevious(temp2);
// System.out.println(temp1.obj);
// System.out.println(temp2.obj);
break;
}
p = (Node)p.getNext();
}
}
}
}
public static void main(String[] args) {
LinkList list = new LinkList();//创建一个LinkList对象
//对链表进行赋值
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//打印链表
// while(list.first!=null)
// {
// System.out.println(list.first.obj);
// list.first =(Node) list.first.getNext();
// }
System.out.println(list.first.obj=="a");
list.remove("c");
while(list.first!=null)
{
System.out.println(list.first.obj);
list.first =(Node) list.first.getNext();
}
}
}
Node类--定义双向链表的节点
package cn.yundylan.collection;
/**
* 链表的实现以及操作
* @author Dylan
*
*/
public class LinkList {
// class LinkList *list;
private Node first;
private Node last;
private int size;
//在双链表中增加一个节点
public void add(Object obj)
{
//空链表
if(first==null)
{
Node n = new Node();//创建一个新节点
n.setPrevious(null);
n.setObj(obj);//给这个节点的obj字段赋值
n.setNext(null);
first = n;
last = n;
size++;
}
else
{
Node n = new Node();//创建一个新节点
n.setObj(obj);//给节点赋值
n.setNext(null);//节点增加在链表最末端,因此其后继节点为空
n.setPrevious(last);//当前增加的节点其前驱节点为当前链表的最后一个节点
last.next = n;
last = n;
size++;
}
}
//删除链表中的一个节点
public void remove(Object obj)
{
// Node n = new Node();
// n.setObj(obj);
Node temp1 = new Node();
Node temp2 = new Node();
if(first!=null)
{
if(first.obj==obj)
{
first = (Node)first.getNext();
first.setPrevious(null);
}
else if(last.obj==obj)
{
Node n = new Node();
n = (Node)last.getPrevious();
n.setNext(null);
}
else
{
Node p = (Node)first.getNext();
while(p!=last)//第一个节点不为空 循环链表找到元素为obj的节点进行删除
{
System.out.println("执行while语句");
System.out.println(p.getObj());
if(p.obj==obj)
{
temp1 = (Node)p.getNext();
temp2 = (Node)p.getPrevious();
temp2.setNext(temp1);
temp1.setPrevious(temp2);
// System.out.println(temp1.obj);
// System.out.println(temp2.obj);
break;
}
p = (Node)p.getNext();
}
}
}
}
public static void main(String[] args) {
LinkList list = new LinkList();//创建一个LinkList对象
//对链表进行赋值
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//打印链表
// while(list.first!=null)
// {
// System.out.println(list.first.obj);
// list.first =(Node) list.first.getNext();
// }
System.out.println(list.first.obj=="a");
list.remove("c");
while(list.first!=null)
{
System.out.println(list.first.obj);
list.first =(Node) list.first.getNext();
}
}
}