链表实现
来源:互联网 发布:淘宝网华为mate7手机壳 编辑:程序博客网 时间:2024/06/05 18:51
package com.algorithm;
/**
* describe: 链表实现
* create on: 2011-05-25
* @author sylor.liu
* @version 1.0
* @since jdk1.6
*/
public class SimulateLink {
Node head;
public class Node {
Object data;
Node next;
public Node(Object data){
this.data = data;
next = null;
}
}
// 初始化链表
public SimulateLink(){
head = null;
}
// 清空链表
public void clear(){
head = null;
}
// 是否为空
public boolean isEmpty(){
return head == null;
}
// 获得第i个节点
public Node getNode(int i) throws Exception{
if(i < 0 || i >= size()) {
throw new Exception("下标异常");
}
int j = 0;
Node temp = head;
while(temp != null && j < i){
j++;
temp = temp.next;
}
return temp;
}
// 往链表中添加一个节点
public void add(Object d,int i ) throws Exception{
if(i < 0 || i > size()) {
throw new Exception("下标异常");
}
Node node = new Node(d);
// 添加节点为第0个节点
if(i == 0){
node.next = head;
head = node;
return;
}
// 添加节点为最后一个节点
if(size() == i){
getNode(i - 1).next = node;
node.next = null;
return;
}
// 添加节点为中间节点
Node temp = getNode(i);
getNode(i-1).next = node;
node.next = temp;
return;
}
// 从链表中删除一个节点
public void remove(int i) throws Exception{
Node temp;
if(i < 0 || i >= size()) {
throw new Exception("下标异常");
}
// 删除节点为第0个节点
if(i == 0){
temp = getNode(i);
head = temp.next;
temp.next = null;
return;
}
// 删除节点为最后一个节点
if(size() - 1 == i){
temp = getNode(i-1);
temp.next = null;
return;
}
// 删除节点为中间节点
Node tempPre = getNode(i-1);
temp = getNode(i);
tempPre.next = temp.next;
temp.next = null;
return;
}
// 返回链表节点个数
public int size(){
int i = 0;
Node temp = head;
while(temp != null){
i++;
temp = temp.next;
}
return i;
}
// 打印链表中的节点
public String toString(){
StringBuffer sb = new StringBuffer();
Node temp = head;
while(temp != null){
sb = sb.append(temp.data + "->");
temp = temp.next;
}
return sb.toString();
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
SimulateLink sl = new SimulateLink();
sl.add(0, 0);
sl.add(1, 1);
sl.add(2, 2);
sl.add(3, 3);
sl.add(4, 4);
sl.add(34, 3);
sl.add(34, 0);
System.out.println(sl);
sl.remove(3);
System.out.println(sl);
sl.remove(0);
System.out.println(sl);
sl.remove(sl.size() - 1);
System.out.println(sl);
}
}
- Java栈实现:数组实现和链表实现
- C++实现队列--数组实现和链表实现
- C++实现队列--数组实现和链表实现
- 队列的实现--链表实现
- Josephus排列-红黑树实现-链表实现
- 实现循环链表(js实现)
- 链表实现队列 C++实现
- 栈实现队列,链表实现栈
- stack 底层简单实现 链表实现
- Java实现 链表实现队列
- 栈模型的实现--链表实现
- 链表的实现
- C#实现链表
- 实现双向链表
- JAVA实现链表
- 双向链表实现
- Java实现链表
- 链表实现
- C++深入虚函数(二)
- 什么是操作系统
- C++虚函数深入(三)
- 【百度空间代码专用贴】
- 设计模式之C++实现(三)---装饰者模式(Decorator)
- 链表实现
- 关于Validate层
- android sdk 介绍
- 因外键约束导致数据不能清空的问题解决
- Framebuffer Driver
- 0欧姆电阻的作用
- 打印九九乘法口诀
- vim取消搜索高亮
- FTP客户端程序