数据结构——查找和删除指定连接点(java实现)

和上一篇相比,增加两个方法,一个是在链表中查找包含指定关键字的链结点,一个是在链表中删除包含指定关键字的链结点。

按照关键字查找的方法可以如下实现,注释部分为本人尝试时做写出的代码:

public Link find(int key)     //find a link according given key
	{
		/* the following is by myself,not good enough,acturally  I needn't temp!
		Link current=first;
		Link temp=null;
		while(current.iData != key)
		{
			if(current.next == null)
			{
				current = null;
			}
			else
			{
				current = current.next;
			}
		}
		temp = current;
		return temp;
		*/
		Link current = first;
		while(current.iData != key)
		{
			if(current.next == null)
			{
				return null;
			}
			else
			{
				current = current.next;
			}
		}
		return current;
	}

按照关键字删除某个链结点,并将其返回:

public Link deletGivenLink(int key) //delete a link according given key
	{
		/*
		*the following code is by myself, note good eneagh!
		Link temp = null;
		Link current = first;
		while(current.iData != key)
		{
			temp = current;
			current = current.next;
		}
		temp.next = current.next;
		return current;
		*/

		//follwowing by the text book
        Link current = first;
        Link previous = first;
        while(current.iData != key)
        {
        	if(current.next == null)
        	{
        		return null;
        	}
        	else
        	{
        		previous = current;
        		current = current.next;
        	}
        }
        if(current == first)
        {
        	first = first.next;
        }
        else
        {
        	previous.next = current.next;
        }
        return current;

	}

完整代码:

class Link
{
	public int iData;
	public double dData;
	public Link next;
//-------------------------------------
	public Link(int iData,double dData)
	{
		this.iData = iData;
		this.dData = dData;
	}
//-------------------------------------
	public void displayLink()
	{
		System.out.print("{" + iData + ", " + dData + "}");
	}
}
class LinkList
{
	private Link first;
	public LinkList()
	{
		first = null;
	}
	public boolean isEmpty()
	{
		return (first == null);
	}

	public void insertFirst(int id, double dd)
	{
		Link newLink = new Link(id, dd);
		newLink.next = first;
		first = newLink;
	}

	public Link deleteFirst()
	{
		Link temp = first;
		first = first.next;
		return temp;
	}


	public void displayList()
	{
		System.out.println("List(first-->last): ");
		Link current = first;
		while(current != null)
		{
			current.displayLink();
			current = current.next;
		}
		System.out.println("");
	}

	public Link find(int key)     //find a link according given key
	{
		/* the following is by myself,not good enough,acturally  I needn't temp!
		Link current=first;
		Link temp=null;
		while(current.iData != key)
		{
			if(current.next == null)
			{
				current = null;
			}
			else
			{
				current = current.next;
			}
		}
		temp = current;
		return temp;
		*/
		Link current = first;
		while(current.iData != key)
		{
			if(current.next == null)
			{
				return null;
			}
			else
			{
				current = current.next;
			}
		}
		return current;
	}

	public Link deletGivenLink(int key) //delete a link according given key
	{
		/*
		*the following code is by myself, note good eneagh!
		Link temp = null;
		Link current = first;
		while(current.iData != key)
		{
			temp = current;
			current = current.next;
		}
		temp.next = current.next;
		return current;
		*/

		//follwowing by the text book
        Link current = first;
        Link previous = first;
        while(current.iData != key)
        {
        	if(current.next == null)
        	{
        		return null;
        	}
        	else
        	{
        		previous = current;
        		current = current.next;
        	}
        }
        if(current == first)
        {
        	first = first.next;
        }
        else
        {
        	previous.next = current.next;
        }
        return current;

	}
}

public class LinkListApp2
{
	public static void  main(String[] args)
	{
		LinkList theList = new LinkList(); //nake new list

		theList.insertFirst(12,23.66);     //insert four items,remember alwayls insert from the first link
		theList.insertFirst(174,2454.66);
		theList.insertFirst(154,25554.66);
		theList.insertFirst(189,256.66);

		theList.displayList();				//display list

		Link f = theList.find(154);		
		if(f != null)
		{
			System.out.println("Found link with key " + f.iData);
		}
		else
		{
			System.out.println("Can't find link");
		}

		Link d = theList.deletGivenLink(12);
		if(d != null)
		{
			System.out.println("Deleted link with key " + d.iData);
		}
		else
		{
			System.out.println("Can't delete link");
		}

		theList.displayList();				//display list
	}
}
运行效果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值