您的位置:首页 > 编程语言 > Java开发

单链表基本操作java实现

2016-09-26 20:04 453 查看

单链表基本操作 - java实现

1.单链表学习了好久,今天终于有时间写一下了,带头结点的单链表上的基本操作,Java实现。

(1) 先来个接口

public interface IList {
public void clear();	//清空链表
public boolean isEmpty();	//链表判空
public int length();	//链表的长度
public Object get(int i) throws Exception;	//按照位序号查找
public void insert(int i,Object x) throws Exception;	//添加节点
public void remove(int i) throws Exception;		//删除节点
public int indexOf(Object x);	//按照数据查找位序号
public void display();		//输出链表
}

(2)Java实现单链表

//节点的定义
class Node{
public Object data;
public Node next;
//无参构造方法
public Node(){
this(null,null);
}
//一个参数的构造方法
public Node(Object data){
this(data,null);
}
//两个参数的构造方法
public Node(Object data, Node next){
this.data = data;
this.next = next;
}
}

//单链表定义
public class LinkList implements IList{
public Node head;

//构造方法
public LinkList(){
head = new Node();
}
//清空链表
@Override
public void clear() {
// TODO Auto-generated method stub
head.data = null;
head.next = null;
}
//链表判空
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return head.next == null;
}
//链表长度
@Override
public int length() {
// TODO Auto-generated method stub
Node p = head.next;
int length = 0;
while(p!=null){
p=p.next;
length++;
}
return length;
}
//按位序号查找
@Override
public Object get(int i) throws Exception{
// TODO Auto-generated method stub
Node p = head.next;
int j = 0;
while(p!=null&&j<i){
p = p.next;
++j;
}
if(j>i || p == null){
throw new Exception("第"+i+"个元素不存在");
}
return p.data;
}
//插入元素
@Override
public void insert(int i, Object x) throws Exception{
// TODO Auto-generated method stub
Node p = head;
int j = -1;
while(p!=null && j<i-1){
p = p.next;
j++;
}
if( j>i-1 || p==null){
throw new Exception("插入位置不合法");
}
Node s = new Node(x);
s.next = p.next;
p.next = s;
}
//删除元素
@Override
public void remove(int i) throws Exception {
// TODO Auto-generated method stub
Node p = head;
int j = -1;
while(p.next != null && j < i-1){
p = p.next;
j++;
}
if(p.next == null || j > i-1){
throw new Exception("删除位置不存在");
}
p.next = p.next.next;
}
//根据值查找位序号
@Override
public int indexOf(Object x) {
// TODO Auto-generated method stub
Node p = head.next;
int j=0;
while(p.next != null && !p.data.equals(x)){
p = p.next;
j++;
}
if(p.next != null){
return j;
}
else {
return -1;
}
}
//输出链表
@Override
public void display() {
// TODO Auto-generated method stub
Node p = head.next;
int j = 0;
while(p != null){
System.out.println("第"+j+"个节点是:"+p.data);
p = p.next;
j++;
}
}
/*
* 测试用的,忽略
*/
//	public static void main(String[] args) throws Exception{
//		LinkList mylist = new LinkList();
//		mylist.insert(0,0);
//		mylist.insert(1,1);
//		mylist.insert(2,2);
//		mylist.insert(3,3);
//		mylist.insert(2,4);
//		mylist.display();
//		System.out.println(mylist.indexOf(2));
//		System.out.println(mylist.get(3));
//		mylist.remove(3);
//		mylist.display();
//		System.out.println(mylist.isEmpty());
//		System.out.println(mylist.indexOf(7));
//		mylist.clear();
//		System.out.println(mylist.isEmpty());
//	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息