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

原创 2008年03月18日 13:46:00
/**//*
 * 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;
}

算法:查找链表中倒数第k个节点

题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。 分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只...
  • sinat_20265495
  • sinat_20265495
  • 2016-10-30 20:54:31
  • 1543

面试题15:查找链表中倒数第k个结点

仅一次遍历查找链表中倒数第k个结点。
  • kekong0713
  • kekong0713
  • 2016-06-27 14:25:18
  • 1142

【经典面试题】寻找单链表倒数第n个节点

面试中经常出现的编程题之一。 最直接的办法是先遍历一遍单链表,记下链表的节点数,然后再次遍历,直到到达节点数减去n的节点,返回结果。实际情况中若链表数目很多而n相对不大,这种方法需要大约两次遍历。更...
  • ruizeng88
  • ruizeng88
  • 2011-08-19 11:01:42
  • 3130

C++算法之 链表中倒数第k个节点

题目:输入一个链表,输出链表中倒数第k个节点,为了符合大多数人的习惯,本题从1开始计数,即链表的尾巴节点是倒数第一个节点。 方法1:先遍历链表得到链表的个数n,倒数第k个节点就是n-k+1再遍历一次...
  • djb100316878
  • djb100316878
  • 2014-12-16 15:31:23
  • 2561

Lintcode 166.链表倒数第n个节点

1.问题描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n 2.解题思路:创建两个指向head的指针p q,让p遍历,p先开始移动,p走到第n-1个节点是,之后p q 一起往后移动,这时候当...
  • wangyukl
  • wangyukl
  • 2017-03-27 23:07:28
  • 390

剑指offer刷题之c++实现的求链表中倒数第k个值

#include "myHead.h" #include "allListNode.h" /* 返回链表中倒数第k个节点(k=1,2,。。。) 设总共n个节点。倒数第k个就是正数第n-k+1.如n=...
  • u012270113
  • u012270113
  • 2015-08-08 12:13:48
  • 356

leetcode 删除单链表中的倒数第k个元素

问题分析:
  • ych_ding
  • ych_ding
  • 2014-12-10 21:46:22
  • 1159

遍历一遍找出链表倒数第K个节点

#include #include #include //类似的问题还有求链表的中间节点判断一个单向链表是否形成了环形结构 struct Node{ int node_val; Node...
  • LHN_hpu
  • LHN_hpu
  • 2016-08-14 16:35:06
  • 312

获取单链表中倒数第N个结点数据

**不管是顺数n个还是倒数n个,其实都是距离-标尺问题。标尺是一段距离可以用线段的两个端点来衡量,我们能够判断倒数第一个节点,因为他的next==NULL。如果我们用两个指针,并保持他们的距离为n,那...
  • qq1169091731
  • qq1169091731
  • 2016-03-19 20:17:57
  • 844

LintCode 删除链表中倒数第n个节点

给出链表1->2->3->4->5->null和 n = 2. 删除倒数第二个节点之后,这个链表将变成1->2->3->5->null. 这个题目相当于在“返回链表倒数第n个节点”的基础上增...
  • sinat_30440627
  • sinat_30440627
  • 2016-03-31 18:58:06
  • 1320
收藏助手
不良信息举报
您举报文章:查找链表倒数第N个结点的地址(C++)
举报原因:
原因补充:

(最多只允许输入30个字)