求单链表的倒数第k个元素

       这是个简单的小题,由于学习Java,所以写写。求单链表的倒数第k个元素。这是一个常规题,可以设置两个指针pa,pb:先让其中一个pa顺序找到顺数第k个节点,然后两个指针一起跑,直到pa=null,此时pb指向的就是倒数第k个。如图:

                                                                  

贴段代码:

class SNode
{
	public int key;
	public SNode next;
	public SNode(int tempKey)
	{
		key=tempKey;
		next=null;
	}
	public SNode(int tempKey,SNode tempNext)
	{
		key=tempKey;
		next=tempNext;
	}
}


public class SList {
	private SNode head;
	public SList()
	{
		head=new SNode(-1);
	}
	/*
	 * 尾插法
	 */
	public void Insert(int tempKey)
	{
		head.next=new SNode(tempKey,head.next);
	}
	public void Print()
	{
		SNode p=head.next;
		while(p!=null)
		{
			System.out.print(p.key+"  ");
			p=p.next;
		}
		System.out.println();
	}
	/*
	 * 查找倒数第tempK个元素
	 */
 	public SNode GetKthNode(int tempK)
	{
		SNode p,q;
		p=head.next;
		int k=0;
		while(p!=null&&k<tempK)
		{
			++k;
			p=p.next;
		}
		if(k<tempK)
		{
			System.out.println("链表长度不足"+tempK+"!");
			return null;
		}
		q=head.next;
		while(p!=null)
		{
			q=q.next;
			p=p.next;
		}
		return q;
	}

	public static void main(String[] agr) {
		SList mySList = new SList();
		for (int i = 1; i <= 25; i++) {
			mySList.Insert(i);
		}
		mySList.Print();
		int Kth = 15;
		SNode KthNode = mySList.GetKthNode(Kth);
		if (null != KthNode)
			System.out.println("元链表中倒数第" + Kth + "个元素是:" + KthNode.key);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值