Java实现单链表

package test2;

class LinkNode{
	private int iData;
	private double dData;
	LinkNode next;
	
	public LinkNode(int i, double d){
		iData = i;
		dData = d;
	}
	public int getIdata(){
		return iData;
	}
	public double getDdata(){
		return dData;
	}
	public void displayLink(){
		System.out.println("iData:"+iData+" dData :"+dData);
	}
	
}

public class LinkList {
	private LinkNode first;
	
	public LinkList(){
		first = null;
	}
	public boolean isEmpty(){
		return first == null;//first对象指向的是第一个元素的引用地址,它的next值即第一个元素的next值
	}
	public void insertFront(int iData, double dData){
		LinkNode tempLinkNode = new LinkNode(iData, dData);
		tempLinkNode.next = first;
		first = tempLinkNode;//此处要将first指向当前节点,而不是将first.next指向当前节点,方便display
	}
	public void deleteFirstNode(){
		if(first != null){
			LinkNode temp = first;
			first = first.next;
			System.out.println("----------------");
			System.out.print("delete:");
			temp.displayLink();
			System.out.println("----------------");
		}else{
			System.out.println("first is null ");
		}
	}
	public void findNode(int iData){
		LinkNode temp = first;
		while(temp != null){
			if(temp.getIdata() == iData){
				System.out.println("find it :linkNode:"+temp.getIdata()+" ---:"+temp.getDdata());
				return;
			}
			else{
				temp = temp.next;
			}
			if(temp == null){
				System.out.println("------------");
				System.out.println("not found it:"+iData);
				return;
			}
		}
	}
	public void deleteNode(int iData){
		LinkNode pre,current;
		pre = first;
		current = first;

		while(current != null){
			if(current.getIdata() == iData){
				if(current == first){
					first = current.next;
				}else{
					pre.next = current.next;//若要修改节点之间的指向,一定要修改next的值,如果
								//仅修改pre或者current的值,仅仅代表临时变量的值改变了,不影响链表节点间的指向
				}
				System.out.println("------------");
				System.out.println("delete it:");
				current.displayLink();
				System.out.println("------------");
				//System.out.println("------------"+first);
				return;
			}else{
				pre = current;
				current = current.next;
			}
			if(current == null){
				System.out.println("------------");
				System.out.println("not found it:"+iData);
			}
		}
		
	}
	public void displayLinkList(){
		LinkNode temp = first;
		while(temp != null){
			
			temp.displayLink();
			temp = temp.next;

		}
	}
}

class TestClass{
	public static void main(String args[]){

		LinkList list = new LinkList();
		list.insertFront(1, 2);
		list.insertFront(2, 4);
		list.insertFront(3, 5);
		list.insertFront(4, 7);
		list.displayLinkList();
		
		list.deleteFirstNode();
		list.displayLinkList();
		
		list.findNode(22);
		
		list.deleteNode(1);
		list.displayLinkList();
		list.deleteNode(3);
		list.displayLinkList();
		list.deleteNode(2);
		list.displayLinkList();
	}
}
输出结果:
iData:4 dData :7.0
iData:3 dData :5.0
iData:2 dData :4.0
iData:1 dData :2.0
----------------
delete:iData:4 dData :7.0
----------------
iData:3 dData :5.0
iData:2 dData :4.0
iData:1 dData :2.0
------------
not found it:22
------------
delete it:
iData:1 dData :2.0
------------
iData:3 dData :5.0
iData:2 dData :4.0
------------
delete it:
iData:3 dData :5.0
------------
iData:2 dData :4.0
------------
delete it:
iData:2 dData :4.0
------------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值