package Exception;
//双链表的实现
import javax.xml.soap.Node;
class ken{
private Node first;//首节点
private Node last;//尾节点
private int size;//链表长度
//在首节点增加
public void add(Object elem){
Node node = new Node(elem);
if(size==0){
this.first = node;
this.last = node;
}else{
node.next = this.first;
this.first.prir = node;
this.first = node;
}
size++;
}
//在尾节点增加
public void addlast(Object elem){
Node node = new Node(elem);
if(size==0){
this.first = node;
this.last = node;
}else{
node.prir = this.last;
node.prir.next = node;
this.last = node;
}
size++;
}
//查找
public boolean search(Object elem){
Node node = this.first;
for(int i = 0;i<size;i++){
if(!node.elem.equals(elem)){
if(node.next == null){
return false;
}
node = node.next;
}
}
return true;
}
//删除第一节点
public void removefirst(Object elem){
Node node = this.first;
for(int i = 0;i<size;i++){
if(node.elem.equals(elem)){
if(node==this.first){
this.first = node.next;
node.next.prir = null;
}
}
node = node.next;
}
size--;
}
//综合的删除,可以删除任何一部分
public void remove(Object elem){
Node node = this.first;
for(int i = 0;i<size;i++){
if(node.elem.equals(elem)){
if(node==this.first){
this.first = node.next;
node.next.prir = null;
size--;
}else if(node==this.last){
this.last = node.prir;
node.prir.next = null;
size--;
}else{
node.prir.next=node.next;
node.next.prir=node.prir;
size--;
}
}
node = node.next;
}
}
//修改
public void Updata(Object elem,Object ele){
Node node = this.first;
for(int i = 0;i<size;i++){
if(elem.equals(node.elem)){
node.elem = ele;
}
node = node.next;
}
}
//用内部类表示一个节点
class Node{
private Node prir;//头指针
private Node next;//尾指针
private Object elem;//元素
Node(Object elem){
this.elem=elem;
}
}
@Override
public String toString() {
if(size==0){
System.out.println("[]");
}
StringBuffer stringbuffer = new StringBuffer();
Node node = this.first;
stringbuffer.append("[");
for(int i=0;i<size;i++){
stringbuffer.append(node.elem);
if(i != size-1){
stringbuffer.append(",");
}else{
stringbuffer.append("]");
}
node = node.next;
}
System.out.println("首位元素:"+this.first.elem);
System.out.println("尾部元素:"+this.last.elem);
return stringbuffer.toString();
}
}
public class fx {
public static void main(String[] args) {
ken k =new ken();
k.add("zhangsan");
k.addlast("zhaosi");
k.add("zhaoliu");
k.addlast("qian");
k.add("qiansan");
k.Updata("qian", "we");
//k.removefirst("qiansan");
//k.addmid("wangwu");
//k.remove("qian");
k.remove("qiansan");
//System.out.println(k.search("zhangsan"));
System.out.println(k.toString());
}
}