带哨兵的单链表的操作java版本

本文介绍了一种使用哨兵节点的单链表实现方式,包括节点定义、链表操作(插入、删除)及遍历方法,并通过示例代码展示了如何使用此链表结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();

}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值