java数据结构链表

package 算法.链表;
class Data
{

    String key;
    String name;
   int age;


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

    //在链表头添加链表头
    CLType CLAddFirst(CLType head, Data nodedata) {
        CLType node;
        if ((node = new CLType()) == null) {
            System.out.println("申请内存失败");
            return null;
        } else {
            node.nodedata = nodedata;//保存数据
            node.nextNode = head;//指向数据头
            head = node;
            return head;
        }
    }


    //在链表后面添加数据
    CLType CLAddEnd(CLType head, Data nodedata) {
        CLType node, htemp;                  //首先是要进行分配内存
        if ((node = new CLType()) == null) {
            System.out.println("申请内存失败");
            return null;
        } else {
            node.nodedata = nodedata;//保存数据
            node.nextNode = null;//设置节点引用为空
            if (head == null) {
                head = node;
                return head;
            }
            htemp = head;
            while (htemp.nextNode != null)//链表头非空,向后查找
            {
                htemp = htemp.nextNode;
            }
            htemp.nextNode = node;
            return head;
        }
    }

    //查找结点
    CLType CLFind(CLType head, String key) {
        CLType htemp;
        htemp = head;
        while (htemp != null)
            if (htemp.nodedata.key.compareTo(key) == 0) {
                return htemp;
            }
        htemp = htemp.nextNode;
    return null;
    }


    //插入结点
    CLType CLInsert(CLType head, String findkey,Data nodedata)
    {
        CLType node,nodetemp;
        if ((node = new CLType()) == null) {
            System.out.println("申请内存失败");
            return null;
        } node.nodedata = nodedata;//保存数据
        nodetemp=CLInsert(head,findkey,nodedata);
        if (nodetemp!=null)
        {
            node.nextNode=nodetemp.nextNode;
            nodetemp.nextNode=node;
        }
        else {
            System.out.println("未找到插入位置");
        }
        return head;
    }

//删除结点
int CLDelete(CLType head, String key)
{
    CLType node,htemp;
    htemp=head;
    node=head;
    while (htemp!=null)
    {
        if (htemp.nodedata.key.compareTo(key)==0){
            node.nextNode=htemp.nextNode;
            htemp=null;
        }
        else {
            node=htemp;
            htemp=htemp.nextNode;
        }

    }
    return 0;
}

//计算链表长度
    int CLLength(CLType head)
    {
        CLType htemp;
        int len=0;
        htemp=head;
        while (htemp!=null)
        {
            len++;
            htemp=htemp.nextNode;
        }
        return len;
    }

//显示所有结点
    CLType CLShow(CLType head)
    {
        CLType htemp,node ;
        Data nodedata;
        htemp=head;
        System.out.println("当前列表共有%d个结点,数据如下\n"+CLLength(head));
        while (htemp!=null)
        {
            nodedata=htemp.nodedata;
            System.out.println("结点(%s%s%d)\n",nodedata.key,nodedata.name,nodedata.age);
            htemp=htemp.nextNode;
        }
        htemp.nextNode=node;
        return head;
    }
}
public class lianbiaoDemo {
    public static void main(String[] args) {
        
    }
}

主函数没有写,略掉了

猜你喜欢

转载自blog.csdn.net/gaoweiyuan1996/article/details/82824911