输入一个链表,输出该链表中倒数第k个结点

我的做法:

   思路:用一个栈,依次压进去,再弹出k个,弹出的第K个就是要找的。

            注意k大于链长的情况。

           

 public ListNode FindKthToTail(ListNode head,int k) {
        if(head==null)
            return null;
        int i=0;
        Stack<ListNode> ss = new Stack<ListNode>();
        while(head!=null) {
            ss.push(head);
            head=head.next;
            i++;
        }
        if(k>i) {
            return null;
        }
       ListNode l = null;
        while(k!=0)
            {l=ss.pop();k--;}
        return l;
        
        
    }
View Code

巧妙的思路:

          利用两个指针,先让第一个指针和第二个指针都指向头结点,

         然后再让第一个指正走(k-1)步,到达第k个节点。然后两个指针同时往后移动,

         当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。

         

if(head==null||k<=0)return null;
           ListNode nodePre=head;
           ListNode nodeLast=head;
            
           for(int i=1;i<k;i++){
               if(nodePre.next!=null)nodePre=nodePre.next;
               else return null;
           }
            
           while(nodePre.next!=null){
               nodePre = nodePre.next;
               nodeLast=nodeLast.next;
           }
           return nodeLast;
View Code

 

posted on 2017-11-15 17:26  GuaNiu9978  阅读(201)  评论(0)    收藏  举报

导航