您的位置:首页 > 理论基础 > 数据结构算法

数据结构 链表 Java实现

2018-02-01 19:19 363 查看
最近在复习数据结构,用正在学的java把链表部分实现了一遍,包括基本的插入,删除,遍历,查找等方法,带头结点
package com.oracle.list;

public class MyList<E> {
class Node {//结点内部类
private Object data;
private Node next;
public Node(Object data) {
super();
this.data = data;
}
public Node() {
super();
this.data=null;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
private Node head;//定义一个头结点
private Node rear;//定义一个尾结点
private Node node;//临时结点
private int length;//长度
/**
* 定义无参构造函数,初始化链表
*/
public MyList() {
head=new Node();
this.rear=this.head;
this.length=0;
}
/**
* 尾插法
*/

public void add(Object data) {
node=new Node(data);
rear.next=node;
rear=node;
length++;
}

/**
* 遍历输出链表
*/
public void printList() {
node =head;
while(node.next!=null) {
System.out.println(node.next.data);
node=node.next;
}
}

/**
* 获取链表的长度
*/

public int getSize() {
return length;
}

/**
* 在i位置之后插入元素o
*/
public void insert(int i,Object o) {
if(i>=0&&i<length) {
Node n=new Node(o);
node =getNode(i);
n.next=node.next;
node.next=n;
length++;

}else {
System.out.println("插入该位置失败,该链表位置范围为0-"+(length-1));
}

}
/**
* 获取该位置的一个值
*/
public Object get(int i) {
return getNode(i).data;
}

/**
* 获取该位置的结点,私有方法
*/
private Node getNode (int i) {
if(i==-1) {
return head;
}//如果是第一个 ,返回头结点
if(i>=0&&i<length) {
node=head;
int j=0;
while(node!=null&&j!=i) {
node=node.next;
j++;
}
return node.next;
}else {
return null;
}
}

/**
* 删除该位置元素,并且返回该元素的值
*/
public void delete(int i) {
if(i>=0&&i<length) {
node=getNode(i-1);//获取该位置前一个元素
node.next=node.next.next;
length--;
}else {
System.out.println("位置错误噢");
}
}
/*设置某个位置的值
*
*/
public void set(int i,Object data) {
node =getNode(i);
node.data=data;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 java