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 查看评论