Java单链表(个人总结)

第三篇技术博客 相当的不好意思 还是没培养成写博客的习惯 看了看上一篇的时间3月13 很多感触 晚点另写一篇总结吧……
这个总结有点相当的过时了 上周就做好了但是一直没细想 现在由于学校课程正在用C实现中 思想相通 姑且把java版本的总结如下
用链表实现队列,首先思考的就是队列的常见功能:插入,添加,删除,索引查找,遍历打印,长度统计,修改.
然后就是思考如何用链表表示,链表的结构特点便是前后相连,与数组这些顺序结构相比,链表特点便是所存取的部分在内存中不连续,前一个元素对象指向下一个,这种指向关系,在C中是指针,在Java中便是引用传递,我觉得区别C与java的也就在这里。(C学的很烂,指针始终没弄明白,也没回头看,不过学JAVA时定义结点类时看到在一个结点类中定义下一个结点为属性,忽然一下就有种懂了的感觉,呵呵),所以对队列的操作便是对这些结点的各种操作,改变结点的属性。
具体实现代码如下;
首先是必须要定义好结点类滴:
public class LinkNode {
private Object obj;
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;
}
}
四个方法,两个属性。
然后就可以写队列类的方法了:
首先定义两个结点:
private LinkNode root=null;
private LinkNode rear=root;
root是根节点,rear是当前结点
队列相应的操作方法就如下了:
//添加元素的方法
public void add(Object obj){//添加元素
LinkNode node=new LinkNode(obj);
if(root==null){
root=node;
rear=root;
}else{
rear.setNext(node);
rear=node;
}
}
//删除指定元素
public void remove(int index){
int count=0;
rear=root;
if(index==0){
root=root.getNext();
}
while(rear!=null&&rear.getNext()!=null){
if(count==index-1){
rear.setNext(rear.getNext().getNext());
}
count++;
rear=rear.getNext();
}
}
//返回队列长度
public int size(){
int count=0;
if(root==null){
return 0;
}else{
count++;
rear=root.getNext();
while(rear!=null){
count++;
rear=rear.getNext();
}
}
return count;
}
//返回指定元素
public Object get(int index){
int count=0;
if(index<0||index>=size()){
throw new RuntimeException();
}
else{
rear=root;
while(rear!=null){
if(count==index){
return rear.getObj();
}
else{
count++;
rear=rear.getNext();
}
}
}
return null;
}
//指定位置插入元素
//此处是用后插法
public void insert(int index,Object obj){
int count=0;
rear=root;
LinkNode node=new LinkNode(obj);
while(rear!=null&&rear.getNext()!=null){
if(count==index){

node.setNext(rear.getNext());
rear.setNext(node);
}
count++;
rear=rear.getNext();
}
if(rear!=null&&rear.getNext()==null){
if(count==index){
rear.setNext(node);
}
}
}

//修改指定元素
public void modify(int index,Object obj){
int count=0;
if(index<0||index>=size()){
throw new RuntimeException();
}
else{
rear=root;
while(rear!=null){
if(count==index){
rear.setObj(obj);
// break;
}
count++;
rear=rear.getNext();
}
}
}
//打印整个队列
public void printLinkList(){
rear=root;
while(rear!=null){
Object obj=rear.getObj();
System.out.println(obj);
rear=rear.getNext();
}
}

总体感觉,写的这些方法都很类似。都是要沿头结点向后查找,如果索引值与计数的count相等,则执行相应删除,修改或添加操作,重要的便是如何调用结点类的四个方法,尤其是后两个setNext()和getNext(),使链表始终保持连接而不中断……

思路是第一位的,明确要实现的功能,再按难易和必要性分块,一步步实现,具体到代码就是分块的执行循环,赋值等基本操作,判断条件的选定,整体模块的调用,呵呵 这是最近写代码的感受 。
还是要交流才能进步的快,写出来,感觉挺舒服,错误欢迎指正,感激不尽………嘿嘿 加油
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值