链表

本文详细介绍了使用Java实现链表的添加、查找、插入、删除和显示等基本操作,并通过一个测试类展示了如何输入链表数据,进行节点的插入、删除和查找,是一篇深入理解链表数据结构的好资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、数据类:节点中的数据部分

package list;

public class Data2 {
       String key;
       String name;
       int age;
}

链表类

package list;

public class CLType {
       Data2 nodeData = new Data2();
       CLType nextNode;
       
	CLType add(CLType head ,Data2 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 addFirst(CLType head,Data2 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 findNode(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 insert(CLType head,String findkey, Data2 nodeData) {
    	   CLType node,nodeTemp;
    	   if ((node = new CLType())==null) {
      			System.out.println("申请内存失败");
      		    return null;
          	   }
    	   node.nodeData = nodeData;
    	   nodeTemp = findNode(head, findkey);
    	   if (nodeTemp != null) {
			node.nextNode = nodeTemp.nextNode;
			nodeTemp.nextNode = node;
		}else {
			System.out.println("未找到正确的插入位置");
		}
    	   return head;
       }
        
       
       int delete (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;
				return 1;
			}else {
				node = htemp;
				htemp = htemp.nextNode;
			}
		}
    	   return 0;
       }
       
       int getLength(CLType head) {
    	   CLType htemp;
    	   int len = 0;
    	   htemp = head;
    	   while (htemp != null) {
			len ++;
			htemp = htemp.nextNode;
		}
    	   return len;
       }
       
       void displayAll(CLType head) {
    	   CLType htemp;
    	   Data2 nodeData;
    	   htemp = head;
    	   System.out.printf("当前共有%d个节点,链表所有数据如下:\n",getLength(head));
    	   while (htemp != null) {
			nodeData = htemp.nodeData;
			System.out.printf("节点(%s,%s,%d)\n",nodeData.key,nodeData.name,nodeData.age);
			htemp = htemp.nextNode;
		}
       }
       
}

测试类:

package list;

import java.util.Scanner;

public class TestCL {
       public static void main(String[] args) {
		CLType node,head = null;
		CLType CL = new CLType();
		String key ,findkey;
		Scanner input = new Scanner(System.in);
		System.out.println("链表测试,先输入链表的数据,格式为:关键字 姓名 年龄\n");
		do {
			Data2 nodeData = new Data2();
			nodeData.key = input.next();
			if (nodeData.key.equals("0")) {
				break;
			} else {
             nodeData.name = input.next();
             nodeData.age = input.nextInt();
             head = CL.add(head, nodeData);
			}
		} while (true);
		CL.displayAll(head);
		System.out.printf("\n演示插入节点,输入插入位置的关键字:");
		findkey = input.next();
		System.out.println("输入插入节点的数据(关键字 姓名 年龄):");
		Data2 nodeData = new Data2();
		nodeData.key = input.next();
		nodeData.name = input.next();
		nodeData.age = input.nextInt();
		head = CL.insert(head, findkey, nodeData);
		CL.displayAll(head);
		System.out.println("\n演示删除节点,输入要删除的关键字:");
		key = input.next();
		CL.delete(head, key);
		CL.displayAll(head);
		System.out.println("\n演示在链表中查找,输入查找关键字:");
		key = input.next();
		node = CL.findNode(head, key);
		if (node != null) {
			nodeData = node.nodeData;
			System.out.printf("关键字%s对应的节点为(%s,%d,%d)\n",key,nodeData,key,nodeData.name,nodeData.age);
		} else {
         System.out.printf("在链表中未找到关键字%s的节点\n",key);
		}
	}
}

结果:

链表测试,先输入链表的数据,格式为:关键字 姓名 年龄

001 a 21
002 b 22
003 c 23
0
当前共有3个节点,链表所有数据如下:
节点(001,a,21)
节点(002,b,22)
节点(003,c,23)

演示插入节点,输入插入位置的关键字:002
输入插入节点的数据(关键字 姓名 年龄):
004 d 24
当前共有4个节点,链表所有数据如下:
节点(001,a,21)
节点(002,b,22)
节点(004,d,24)
节点(003,c,23)

演示删除节点,输入要删除的关键字:
004
当前共有3个节点,链表所有数据如下:
节点(001,a,21)
节点(002,b,22)
节点(003,c,23)

演示在链表中查找,输入查找关键字:
003
关键字003对应的节点为(003,c,23)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值