[原]《面试题精选》11.链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:
总结:用到了单链表的实现,以及保持一定距离的双指针方法
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
分析:这道题算是简单的了,很容易想到用到两个指针,因为用一个指针的话你必须要遍历链表两遍,所以用到两个距离为k的指针来实现,可以达到只遍历一次,下面给出我写的java代码,其中MyList和MyNode是我自己实现的单链表,也可以直接使用Linkedlist 。
public class FindK{
public static void main(String args[]){
MyList list = new MyList() ;
list.add(1) ;
list.add(2) ;
list.add(3) ;
list.add(4) ;
list.add(5) ;
list.add(6) ;
int k = 3 ; //print : 4
int n = list.N ;
MyNode Inode = list.first ;
MyNode Jnode = list.first ;
int i = 0 ;
while(Jnode!=null){
Jnode = Jnode.nextNode ;
i++ ;
if(i>k){
Inode = Inode.nextNode ;
}
}
System.out.println(Inode.key) ;
}
}
class MyList{
MyNode first ;
MyNode last ;
int N = 0 ;
public void add(int x){
MyNode newNode = new MyNode(x) ;
if(N==0){
first = newNode ;
last = newNode ;
}else{
last.nextNode = newNode ;
last = newNode ;
}
N++ ;
}
}
class MyNode{
int key ;
MyNode nextNode ;
public MyNode(int x){
key = x ;
}
}总结:用到了单链表的实现,以及保持一定距离的双指针方法
作者:SpeedMe 发表于2014-4-15 23:23:31 原文链接
阅读:98 评论:0 查看评论
浙公网安备 33010602011771号