java实现链表结构详细代码

一、数据准备

 1. 定义节点

   2.   定义链表

           1.数据部分

           2.节点部分

class DATA              //数据节点类型
{
  String key;
  String name;
   int age;      
          
}    

class CLType                 //定义链表结构
{
DATA nodeData  =new DATA();
CLType nextNode;
}

二、追加节点

  1. 首先分配内存,保存新增节点
  2. 从头应用head开始追个检查,直到找到最后结点
  3. 将表尾结点地址部分设置为新增节点的地址
  4. 将新增节点的地址部分置为null
CLType CLAddEnd(CLType head,DATA nodeData)
{
    CLType node,temp;
    if((node=new CLType()==null){
    System.out.println("申请内存失败");
    return null;            //申请内存失败
}

      else{
            node.nodeData=nodeData;
            node.nextNode=null;
            if(head==null)
             {
              head =node;
              return head;
              }
             temp=head;
             while(temp!=null){
             temp=temp.nextNode;               //查找链表的末尾
             
             }
             temp.nextNode=node;
             return head;
}

}                                                                                    

三、插入头结点

  1. 分配内存空间
  2. 使新增节点指向head
  3. 使head指向新增节点
CLType CLAddFirst(DATA nodeData,CLType head){
      CLType node;
      if((node=new CLType())==null)
         {
             return null;
         }
else{ node.nodeData=nodeData; node.nextNode=head; head=node; return head; } }

四、查找节点

CLType CLFindNode(CLType head,String key)
{
         CLType temp;
         temp =head;
         while(temp!=null){
          if(temp.nodaData==key)
           return temp;
           temp=temp.nextNode;
         }
          return null;
}

五、插入节点

CLType CLInsentNode(CLType head,String findkey,DATA nodeData)
{
      CLtype node,nodetemp;
      if((node=new CLType())==null)
      {
              System.out.println("申请内存失败!");
              return null;
      }
       node.nodaData=nodeData;
       nodetemp=(head,findkey);     //查找对应节点
       if(nodetemp!=null)                 //若找到节点
       {
                node.nextNode=nodetemp.nextNode;
                nodetemp.nextNode=node;
        }
        else
        {
                System.out.println("未找到正确的插入位置!");
        }
        return head;
}

六、删除节点

int CLDeleteNode(CLType head; String key)
{
     CKtype node,temp;
      node = head;
      temp = head;
      while(temp!=null)
      {
            if(temp.nodeData.key.compareTo(key)==0)
            {
                   node.nextNode=temp.nextNode;
                   temp=null;
                   return 1;
             }
           elas
            {    
                   note=temp;
                   temp=temp.nextNode;
             }     
      }
       return 0;
}    

七、计算链表长度

int CLLength(CLType head )
{
     CLType temp;
     temp = head;
     int length=0;
     while(temp!=null)
     {
             length++;
             temp=temp.nextNode;
      }
      return length;
}

八、显示所有节点

void CLAllNode(CLType head)
{
       CLType temp;
       DATA  nodeData;
       temp = head;
       System.out.println("当前链表共有"+CLLength(head)+"个节点。链表数据如下:");
     
       while(temp!=null)
       {
           nodeData=temp.nodeData;
           System.out.println(""+nodeData.key+nodeData.name+nodeData.age);
           temp=temp.nextNode;
       }
}
原文地址:https://www.cnblogs.com/whieenz/p/5341211.html