最近在复习数据结构,用正在学的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实现
最新推荐文章于 2024-08-30 18:40:43 发布