单链表基本操作 - 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());
// }
}