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();
}
}
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();
}
}
- 【算法数据结构Java实现】Java实现单链表
- java实现单链表
- Java实现单链表
- java--实现单链表
- Java单链表的实现
- java实现单链表
- java实现单链表
- 单链表java语言实现
- 单链表之Java实现
- java单链表实现
- 单链表操作java实现
- 单链表---java实现
- Java实现单链表
- Java实现单链表
- java语言实现单链表
- 单链表 java实现
- 用java实现单链表
- Java 实现单链表反序
- Git环境搭建与基本使用方法
- jdbc调用sqlserver存储过程无返回结果集处理办法
- poj-Power Strings -2406
- android.graphics.Bitmap.Config<ALPHA_8, ARGB_4444,ARGB_8888,RGB_565>
- 傅里叶变换和小波变换区别
- java单链表实现
- 深刻理解Linux进程间通信(IPC)
- 众手游公司崛起:腾讯“主营收入”面临危机!
- ubuntu 下火狐 使用迅雷看看
- 字符串匹配 -- KMP算法
- poj1035_Spell checker
- spring batch批处理分区读取数据库的例子
- HIVE中MAPJOIN可以使用的场景分析
- USB充电插拔和usb Debugging connect提示