查找链表倒数第N个结点的地址(C++)

/*
 * Author : roof
 
*/

#include 
< stdio.h >

template 
< typename Elm >
struct  Node  {
    Elm elm;
    Node
* next;
}
;
template 
< typename Elm >
Node
< Elm >*  lastPos(Node < Elm >*  head,  int  num)  {
    
if (num <= 0)
        
return 0;
    Node
<Elm>* move = head;
    Node
<Elm>* pre = move;
    Node
<Elm>* tmp;
    
int cnt = 0;
    
while (move) {
        tmp 
= move;
        
while (++cnt <= num) {
            move 
= move->next;
            
if (!move) {
                
if (cnt < num && tmp == head)
                    
return 0;
                
while (cnt-- > 0)
                    pre 
= pre->next;
                
return pre;
            }

        }

        pre 
= tmp;
        cnt 
= 0;
    }

    
return 0;
}

int  main()  {
    
int ilist[] = {123456};
    Node
<int> *head;
    Node
<int> *tmp, *move;
    
for (int i=0; i<6++i) {
        
if (0 == i) {
            head 
= new Node<int>;
            head
->elm = ilist[0];
            move 
= head;
        }

        tmp 
= new Node<int>;
        tmp
->elm = ilist[i];
        move
->next = tmp;
        move 
= tmp;
    }

    move
->next = 0;
    
for (int i=0; i<10++i) {
        printf(
"倒数第%d个 ", i);
        printf(
"%d ", (lastPos(head, i) ? lastPos(head, i)->elm : -1));
    }

    getchar();
    
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值