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

来源:互联网 发布:linux配置samba服务器 编辑:程序博客网 时间:2024/05/29 09:50

**不管是顺数n个还是倒数n个,其实都是距离-标尺问题。标尺是一段距离可以用线段的两个端点来衡量,我们能够判断倒数第一个节点,因为他的next==NULL。如果我们用两个指针,并保持他们的距离为n,那么当这个线段的右端指向末尾节点时,左端节点就指向倒数第n个节点。
所以思路出来了:建立两个指针,第一个先走n步,然后第2个指针也开始走,两个指针步伐(前进速度)一致。当第一个结点走到链表末尾时,第二个节点的位置就是我们需要的倒数第n个节点的值。**

while (i < n && firstNode->next != NULL){    //正数N个节点,firstNode指向正的第N个节点    i++;    firstNode = firstNode->next;    printf("%d\n", i);}

然后两个节点都开始走。 firstNode 从停下的地方继续走,而 secNode 则是从表头开始走。很明显,当 firstNode 走到表尾的时候,secNode 就正好走到表的倒数第 n 个数了。

while (firstNode != NULL){    //查找倒数第N个元素    secNode = secNode->next;    firstNode = firstNode->next;    //printf("secNode:%d\n", secNode->data);    //printf("firstNode:%d\n", firstNode->data);}

这个是“距离 - 标尺”的典型例子。求整数第 n 个数呢?自己思考吧。
附完整代码

#include <iostream>using namespace std;#define MaxSize 100typedef int ElemType;struct Node{    ElemType data;    Node *next;};Node* Create(){    int n,i;    cout<<"创建单链表:"<<endl;    cout<<"请输入你要创建链表的长度:";    cin>>n;    cout<<endl;    int A[MaxSize];    cout<<"请输入你要创建的链表数据:";    for(i=0;i<n;i++)        cin>>A[i];    cout<<endl;    Node *head,*p,*q;    head=new Node;    head->next=NULL;    p=head;    for(i=0;i<n;i++)    {        q=new Node;        q->data=A[i];        p->next=q;        p=q;    }    q->next=NULL;    return head;}void Showlink(Node *head){    cout<<"显示链表中的数据:";    Node *p=head;    p=p->next;    while(p)    {        cout<<p->data<<" ";        p=p->next;    }    cout<<endl;    return ;}ElemType Findlastth(Node *head,int i)          //找寻链表中倒数第N个数{    int k=i;    Node *p,*q;    p=q=head->next;    while(k>1)    {        q=q->next;        k--;    }    if(q->next==NULL) return p->data;    while(q->next)    {        p=p->next;        q=q->next;    }    return p->data;}int main(){    int i;    Node *head;    head=Create();    Showlink(head);    cout<<"请输入您要找的链表倒数第几个数:";    cin>>i;    cout<<"您要找的数为:"<<Findlastth(head,i)<<endl;    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 安置房怎么办房产证吗 美甲后指甲长了怎么办 在菲律宾怎么办持枪证? 绝地求生打不准怎么办 身份证号码变更后社保怎么办 社保与身份不符怎么办 年龄改了学籍怎么办 结婚证信息错误怎么办 六级身份证过期怎么办 身份号泄露了怎么办 身体证信息泄露怎么办 手机号被泄漏了怎么办 姓名和电话泄露怎么办 个人身份证信息泄露怎么办 身份号码泄露了怎么办 我身份证泄露了怎么办 身份证信息泄漏了怎么办 无锡身份证丢了怎么办 人在外地怎么办身份证 欠空放公司不还怎么办 兼职要身份证照片怎么办 身份证刷不了磁怎么办 身份证不能刷了怎么办 身份证指纹错了怎么办 指纹手机丢了怎么办 异地办理临时身份证怎么办 杭州办理外地身份证怎么办 办理身份证没有户口本怎么办 2018身份证掉了怎么办 双户口注销社保怎么办 常用户口被注销怎么办 刚到厦门怎么办身份证 新疆身份证丢了怎么办 技能证书丢了怎么办 16岁拍身份证怎么办 16岁以下怎么办身份证 办身份证要证明怎么办 15岁怎么办银行卡淘宝 满16岁怎么办银行卡 电脑最小化后不见了怎么办 满16周岁怎么办银行卡