简单单向链表

简单链表
前几次课程是关于用数组实现队列,那么现在要掌握的就是用链表来实现队列了。
数组和队列是作为两种基本的简单数据结构,在编程过程中是经常用到的。就两者区别而言,数组趋向于连续,链表趋向于离散。而就我个人而言,链表是实际操作性要比数组强。但是,正如胡哥所说,比较数组和链表究竟哪个好哪个坏是没有意义的,一个事物的存在必然有他存在的道理和必要,重要的是在什么场合应该使用什么样的方式来解决问题。
链表,实际上就像一个又一个的珠子,用一条线将他们穿起来,连成一个整体,用这样的方式来是这些“珠子”联系到一起来。而链表中所实现的功能由程序员自己定义,比如添加,插入,删除等等,接下来就是一个简单的链表。
要实现一个链表,首先应该实现一个LinkNode的类,其中要定义基本属性和基本方法,以供后面的大功能使用:
public class LinkNode {
private Object obj=new Object();//节点内的数据对象
private LinkNode next;//定义下一个节点的引用
//在创建节点对象的时候就传入节点中的数据对象
public LinkNode(Object obj){
this.obj=obj;
}
public Object getObj(){
return obj;
}
public void setObj(Object obj){
this.obj=obj;
}
public LinkNode getNext(){
return next;
}
public void setNext(LinkNode next){
this.next=next;
}
}
在完成基本类的编写后,要完成功能方法的实现,在此,我将实现几种常见的简单的功能:
为了方便功能方法的实现,在主函数类LinkList中定义如下属性:
private static LinkNode root=null;
private static LinkNode last=null;
在主函数类LinkList中定义一下功能方法:
1. 添加功能:
// 定义一个添加功能(添加到最后一个后面)
public void add(Object obj){
LinkNode node=new LinkNode(obj);
if(null==root){
root=node;
last=root;
}else{
last.setNext(node);
last=node;
}
2.删除功能

//定义一个删除功能
public void remove(int index){
if(index==0){
root=this.getNode(index+1);
}else if(this.getNode(index)==null){
System.out.println("输入错误!");
}else{
this.getNode(index-1).setNext(this.getNode(index+1));
}
}
2.插入功能
//插入功能(在指定位置后面插入)
public void insert(Object obj,int index){
LinkNode node=new LinkNode(obj);
if(root==null){
root=node;
}else{
LinkNode node2 = this.getNode(index+1);
this.getNode(index).setNext(node);

node.setNext(node2);
}
}
3.查询功能
//定义一个查询指定位置对象的功能
public LinkNode getNode(int index){
LinkNode node=root;
int count=0;
while(count!=index){
node=node.getNext();
count++;
}
return node;
}
4.打印功能
//定义一个打印功能
public void print(LinkNode root){
LinkNode node=new LinkNode(null);
node=root;
while(node!=null){
System.out.println(node.getObj());
node=node.getNext();
}
}
5.确定长度功能
public int getLength(){
int length=0;
LinkNode node=root;
while(node!=null){
node=node.getNext();
length++;
}
return length;
}
}
主函数如下:
public static void main(String[] args) {
LinkList list=new LinkList();
list.add("添加成功了!");
list.add("再次添加成功了!");
list.remove(1);
list.insert("插入了!", 0);
System.out.println("该链表的长度是: "+list.getLength());
list.print(root);
}
得到结果如图:
[img]http://dl2.iteye.com/upload/attachment/0087/0822/51aa1602-a777-3e4e-a42a-ed4b6473be84.png[/img]


这样就实现了一个简单的单向链表!
虽然上述代码比较简单,但是,这是学好更加深层次的东西的基础,所以,应该反复咀嚼,好好消化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值