java链表初步学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyangxueit/article/details/50704368

java中的链表和  c/c++  一样,也是一种线性数据结构。和数组的功能有一定的相似,但是两者之间在某些方面还是存在很大的不同,简单的来说不同点有以下几点:

1.在创建数组时,是一次性地开辟一整块内存空间,所有数组元素都是放在里面,必须说明数组的固定长度。而链表可以先创建一个链表头(实际就是第一个结点),在需要的时候动态地添加(扩展链表)

2.数组的数据是按照元素顺序连续地存储在内存中的,定位数组中的数据只要知道其在数组中的位置就行。链表是以结点为单位的,在存储数据时并不是连续存放的,除却数据外,还另外包含指向下一节点的指针,访问数据时总是需要从链表头开始

3.对数组元素进行插入,删除,修改时需要对数组元素进行大规模的移动,而链表避免了这样的情况。

   

链表是以结点为单位的,我们需要首先定义声明链表中的结点类

class Node{//先建立一个节点类
    private int m_Data;
    private Node  m_Next;
    Node(int data){//只有一个节点
    m_Data=data;
    m_Next=null;
    }
    Node(int data,Node next){//包含多个节点,必须定义指针
        m_Data=data;
        m_Next=next;
    }
    int getData(){
        return m_Data;
    }
    void setData(int data){
        m_Data=data;
    }
    Node  getNext(){
        return m_Next;
    }
    void setNext(Node next){
        m_Next=next;
    }
}

以下是一些关于创建链表,遍历链表,插入,删除链表相关结点的操作:
class Linklist{
    Node m_FirstNode;//定义第一个节点
    Linklist(){
        m_FirstNode=null;
    }//第一个构造函数,第一个节点就是为空的,说明是个空链表
    Linklist(int data){
        m_FirstNode=new Node(data);
    }//建立一个只有一个节点的链表,因为没有声明指针
    String visitAllNode(){
        Node  next=m_FirstNode;
        String s="";
        while (next!=null){
            s=s+next.getData();
            next=next.getNext();
        }
        return s;
    }//遍历所有的节点,定义声明next是为了不影响第一个节点
    void insertAfterId(int data,int id){
        Node next =m_FirstNode;
        if(next==null){
            m_FirstNode=new Node(data);
        }
        else
        {
            while(next.getNext()!=null&&next.getData()!=id)
                next=next.getNext();
            next.setNext(new Node(data,next.getNext()));
        }
    }//在指定的id位置上插入
    boolean removeAtId(int id){
        Node ahead=m_FirstNode;
        Node follow=ahead;
        if(ahead==null)
            return false;
        else if(ahead.getData()==id)
        {
            m_FirstNode=m_FirstNode.getNext();
            return true;
        }
        else{
            ahead=ahead.getNext();
            while(ahead!=null){
                if(ahead.getData()==id){
                    follow.setNext(ahead.getNext());
                    return true;
                }
                follow=ahead;
                ahead=ahead.getNext();
            }
            return false;
        }
    }
    void removeAll(){
        m_FirstNode=null;
    }
}

猜你喜欢

转载自blog.csdn.net/liyangxueit/article/details/50704368
今日推荐