package singlelistwithsentry;
public class Node<T extends Comparable<T>> implements Comparable<Node<T>> {
private T data;
private Node<T> next;
public Node(){
}
public Node(T data) {
this.data = data;
this.next=null;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Node<T> getNext() {
return next;
}
public void setNext(Node<T> next) {
this.next = next;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((data == null) ? 0 : data.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Node other = (Node) obj;
if (data == null) {
if (other.data != null)
return false;
} else if (!data.equals(other.data))
return false;
return true;
}
@Override
public int compareTo(Node<T> o) {
return this.data.compareTo(o.getData());
}
}
/**
package singlelistwithsentry;/**
* @author yy
*
*/
public class SingleListWithSentry<T extends Comparable<T>> {
//sentry是哨兵节点,很方便的插入和删除
private final Node<T> sentry=new Node<T>();
private Node<T> head;
public Node<T> getHead() {
return head;
}
public SingleListWithSentry() {
this.head=sentry;
}
//添加节点从根节点进行插入
public void insertData(T data){
Node<T> node=new Node<T>(data);
node.setNext(this.head.getNext());
this.head.setNext(node);
}
//删除操作
public void deleteData(T data){
Node<T> pnode=new Node<T>(data);
Node<T> node=this.head;
Node<T> prenode=node;
while(node.getNext()!=null){
node=node.getNext();
if(node.equals(pnode)){
prenode.setNext(node.getNext());
node=null;
break;
}
prenode=node;
}
}
//遍历链表
public void travense(){
this.travense(this.head);
}
private void travense(Node<T> head){
Node<T> node=head;
while(node.getNext()!=null){
node=node.getNext();
System.out.print(node.getData()+" ");
}
System.out.println();
}
}
package singlelistwithsentry;
public class TestSingleListWithSentry {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SingleListWithSentry<Integer> a=new SingleListWithSentry<Integer>();
a.insertData(1);
a.insertData(2);
a.insertData(3);
a.insertData(4);
a.travense();
a.deleteData(4);
a.travense();
}
}