[原]《面试题精选》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 查看评论
原文地址:https://www.cnblogs.com/huanglei/p/3677693.html