java 链表实现

package lianbiao;
import java.util.Scanner;


/*define CL data class*/
class DATA2{
	String key;
	String name;
	int age;
}
/*define CL data class*/


/*define CL structure*/
class CLType{
	DATA2 nodeData= new DATA2();
	CLType	nextNode;
/*define CL structure*/


	/*add end node*/
	CLType CLAddEnd(CLType head,DATA2 nodeData){
		CLType node,htemp;
		if((node = new CLType())==null){
			System.out.print("the memory distribute failed");
			return null;
		}
		else
		{
			node.nodeData = nodeData;//save nodeData
			node.nextNode = null;
			if(head == null){
				head = node;
				return head;
			}
			htemp = head;
			while(htemp.nextNode!=null){//find CL end
				htemp = htemp.nextNode;
			}
			htemp.nextNode = node;
			return head;
		}
	}
	/*add end node*/


	/*add first node*/
	CLType CLAddFirst(CLType head,DATA2 nodeData){
		CLType node;
		if((node = new CLType())==null){
			System.out.print("the memory distribute failed");
			return null;
		}
		else{
			node.nodeData = nodeData;
			node.nextNode = head;
			head = node;
			return head;
		}
	}
	/*add first node*/


	/*find node*/
	CLType CLFindNode(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;
	}
	/*find node*/
	

	/*insert node*/
	CLType CLInsertNode(CLType head,String findkey,DATA2 nodeData){ 
		CLType node,nodetemp;
		if((node = new CLType())==null){
			System.out.print("the memory distribute failed");
			return null;
		}
		node.nodeData = nodeData;
		nodetemp = CLFindNode(head,findkey);
		if(nodetemp!=null){
			node.nextNode = nodetemp.nextNode;
			nodetemp.nextNode = node;
		}
		else{
			System.out.print("not find the correct location");
		}
		return head;
	}
	/*insert node*/


	/*delete node*/
	int CLDeleteNode(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;
	}
	/*delete node*/


	/*get length*/
	int CLLength(CLType head){
		CLType htemp;
		int len = 0;
		htemp = head;
		while(htemp!=null){
			len ++;
			htemp = htemp.nextNode;
		}
		return len;
	}
	
	/*get length*/


	/*show all node*/
	void CLAllNode(CLType head){
		CLType htemp;
		DATA2 nodeData;
		htemp = head;
		System.out.printf("the present node number is %d,all of them are:\n",CLLength(head));
		while(htemp!=null){
			nodeData = htemp.nodeData;
			System.out.printf("node(%s,%s,%s)\n",nodeData.key,nodeData.name,nodeData.age);
			htemp = htemp.nextNode;
		}
	}
}
	/*show all node*/

public class lianbiao{
	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.print("chain list(CL) test,please input CL data,the format: keyword name age\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.CLAddEnd(head,nodeData);
			}
		}while(true);
		CL.CLAllNode(head);
		
		System.out.print("insert node:please input the keyword\n");
		findkey = input.next();
		System.out.print("please input the data that you want to insert(key,name,age):\n");
		DATA2 nodeData = new DATA2();
		nodeData.key = input.next();
		nodeData.name = input.next();
		nodeData.age = input.nextInt();	
		head = CL.CLInsertNode(head,findkey,nodeData);
		CL.CLAllNode(head);
		
		System.out.print("delete node:please input the keyword that you want to delete\n");
		key = input.next();
		CL.CLDeleteNode(head,key);
		CL.CLAllNode(head);
		
		System.out.print("find node:please input the keyword that you want to find\n");
		key = input.next();
		input.close();
		node = CL.CLFindNode(head,key);
		if(node!=null){
			nodeData = node.nodeData;
			System.out.printf("the node finded by keyword:(%s,%s,%s)\n",nodeData.key,nodeData.name,nodeData.age);
		}
		else{
			System.out.printf("not find the node!\n",key);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值