zoukankan      html  css  js  c++  java
  • [原]《面试题精选》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 查看评论
  • 相关阅读:
    【GDOI 2016 Day1】第二题 最长公共子串
    2016.5.21【初中部 NOIP提高组】模拟赛A​ 总结
    【GDOI2014模拟】雨天的尾巴
    树链剖分
    GDOI2016总结
    【GDOI 2016 Day2】第一题 SigemaGO
    【ZJOI2008】树的统计
    【GDOI2016模拟4.22】总结
    【NOIP2016提高A组模拟7.17】寻找
    【NOIP2016提高A组模拟7.17】锦标赛
  • 原文地址:https://www.cnblogs.com/huanglei/p/3677693.html
Copyright © 2011-2022 走看看