【剑指offer-解题系列(14)】链表中倒数第k个节点

题目描述

输入一个链表,输出该链表中倒数第k个结点。
分析
用两个指针,第一个先向前跳k个节点,然后两个指针同时向后跳动,第一个指针到达末尾时候,第二个指针就指向倒数第k个节点了。
也可以用递归,用一个变量计数。
代码实现
/递归版本
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        ListNode*p = NULL;
        int i = 0;
        recur( pListHead,  i,  k,p);
        return p;
    }
   
 
   void recur(ListNode* head,int & i,int k,ListNode*&p){
        if(head==NULL){
            i=0;
            p==NULL;
            return ;
        }
        else
        {
            recur(head->next,i,k,p); 
            i++;
            if(i==k)
                p = head;
        }    
    }

/两个指针版本
    ListNode* FindKthToTail2(ListNode* pListHead, unsigned int k) {
        ListNode*p =pListHead,*q =pListHead;
        if(p==NULL)return NULL;
        int i;
        for( i=0 ;i<k&&p!=NULL;i++){
            p=p->next;
        }
        if(i<k)return NULL;
        while(p!=NULL){
            p=p->next;
            q=q->next;
        }
        return q;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值