java单链表实现

来源:互联网 发布:电影票订购软件 编辑:程序博客网 时间:2024/06/05 06:23
package app.action;




class Node {
Object data;
Node next;


//空节点
public Node() {
        data=null;
        next=null;
};

    //非空节点
public Node(Object obj) {
this.data = obj;
this.next = null;
}


}


/**
 * 
 * @description
 * 注:在这里链表默认都是带有头节点(数据域为空)
 * @version 1.0
 * @author meify  2013-7-29 下午3:36:19
 */
public class LinkList {


Node head; //单链表头
Node rear;  //单链表尾


public LinkList() {
this.head = new Node(); //头节点为一数据内容为空的节点
this.rear = head;
}


/*
 * 往单链表头部插入节点(头插法)
 */
public void insert_head(Node node){
node.next=head.next;
head.next=node;
}


/*
 * 往单链表尾部添加一节点(尾插法)
 */
public void insert_rear(Node node) {
rear.next = node;
rear = node;
}




   /*
    * 节点A之前插入新节点B
    * 在这里需要记下节点A的前驱节点
    */
public void insert_before(Node A,Node B){


Node p=head; //当前指向的节点
while(p!=null&&!p.next.equals(A)){
p=p.next;
}
B.next=p.next;
p.next=B;
}

/*
* 在节点A之后插入节点B

*/
public void insert_after(Node A,Node B){
Node p=head.next; //当前指向的节点
while(p!=null&&!p.equals(A)){
p=p.next;
}
B.next=p.next;
p.next=B;
}


/*
*   删除某节点
*/
public void remove(Node node) {
Node p = head;
while (p.next != null) {
Node currentNode = p.next;
if (currentNode.equals(node)) {
p.next = currentNode.next;
System.out.println("删除节点"+node.data+"成功");
break;
} else {
p = p.next;
}
}
if(p.next == null){
System.out.println("删除失败,找不到"+node.data+"节点");
}
}


  /*
   * 查找某节点的位置(从1 开始 ,若找不到返回-1)
   */
public int getIndex(Node node){
int index=1;
Node p=this.head.next;
while(p!=null){
if(p.equals(node)){
break;
}else{
p=p.next;
index++;
}
}
if(p==null){
return -1;
}
return index;
}



  /*
   * 遍历显示链表全部节点
   */
public void show() {
Node p = head.next;
while (p != null) {
System.out.print(p.data + "\t");
p = p.next;
}
System.out.println();
}

/*
* 获取单链表的长度
*/
public int getLength(){
int len=0;
Node p=head.next;
while(p!=null){
len++;
p=p.next;
}
return len;
}

/*
* 就地逆转单向链表:
* 另创建一个空链表,然后遍历原链表并头插法插到新的链表中
*/
public LinkList convert(LinkList list){
LinkList list1=new LinkList();
Node p=list.head.next;
while(p!=null){
list1.insert_head(p);
p=p.next;
}
return list1;
}







public static void main(String[] args) {

Node A=new Node(new Character('A'));
Node B=new Node(new Character('B'));
Node C=new Node(new Character('C'));
Node D=new Node(new Character('D'));
Node E=new Node(new Character('E'));
Node F=new Node(new Character('F'));
Node G=new Node(new Character('G'));
Node H=new Node(new Character('H'));
Node I=new Node(new Character('I'));
Node J=new Node(new Character('J'));

LinkList list = new LinkList();
list.insert_rear(A);
list.insert_rear(B);
list.insert_rear(C);
list.insert_rear(D);
list.insert_rear(E);
list.insert_rear(F);
list.show();

list.remove(A);
list.show();

list.insert_head(A);
list.show();

list.insert_rear(G);
list.show();

list.insert_before(A, H);
list.show();

list.insert_after(D, I);
list.show();
        
list.insert_after(H, J);
list.show();


}


}
原创粉丝点击