这是个简单的小题,由于学习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);
}
}