博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求链表的倒数第m个元素
阅读量:6930 次
发布时间:2019-06-27

本文共 1232 字,大约阅读时间需要 4 分钟。

 

 

法一:

首先遍历一遍单链表,求出整个单链表的长度n,然后将倒数第m个,转换为正数第n-m+1个,接下去遍历一次就可以得到结果。

不过这种方法需要对链表进行两次遍历,第一次遍历用于求解单链表的长度,第二次遍历用于查找正数第n-m+1个元素。 

1 ElementType Find( List L, int m ) 2 { 3     PtrToNode p; 4     int n = 0; 5     p = L->Next;   6     while(p) 7     {  8       n++;    //先求出链表长度n 9       p = p->Next;10     }11     12     if(m > n)13       return ERROR;14     15     int i = 1;16     p = L;17     for(; i <= n-m+1; ++i)  //倒数第m个即为正数第n-m+1个18       p = p->Next;19       20     return p->Data;21     22 }

 

法二:

设置两个指针,让其中一个指针比另一个指针先前移k步,然后两个指针同时往前移动。循环直到先行的指针指为NULL时,另一个指针所指的位置就是所要找的位置

1 ElementType Find( List L, int m ) 2 { 3     PtrToNode p, q; 4     p = q = L; 5     int i = 0; 6     for(; i < m; ++i) 7     { q = q->Next; 8       if(!q) 9         return ERROR;10     }11     while(q)      //p,q一起走,当q为NULL时,p就是倒数第m个结点12     {13       p = p->Next;14       q = q->Next;15     }16     return p->Data;17 }

 

法三:用一个足够大的数组保存链表中的元素值

1 ElementType Find( List L, int m ) 2 { 3     int a[100000]; 4     int cnt = 0; 5     L = L->Next; 6     while(L) 7     { 8         a[cnt++] = L->Data; 9         L = L->Next;10     }11     if(m>cnt)12         return ERROR;13     else14         return a[cnt-m];15 }

 

转载于:https://www.cnblogs.com/FengZeng666/p/9706771.html

你可能感兴趣的文章
Oracle 10G R2一次奇怪的START/SHUTDOWN经历
查看>>
遭遇 Svchost.exe 进程占用CPU 100%
查看>>
备份数据库的T-SQL语句
查看>>
虚拟化技术漫谈
查看>>
jsonP格式接口实现
查看>>
Struts1.x系列教程(20):使用EventDispatchAction类处理一个form多个submit
查看>>
windows中开启snmp
查看>>
Microsoft BitLocker Administration and Monitoring安装
查看>>
【STM32 .Net MF开发板学习-11】步进电机控制(非PWM模式)
查看>>
综合应用WPF/WCF/WF/LINQ之十三:LINQ的ORM功能中对使用sp_executesql语句的存储过程的支持...
查看>>
MongoDB帮助信息:db方法,collection方法
查看>>
带你走近AngularJS - 创建自定义指令
查看>>
exchange 2007 碰到NDR
查看>>
机器人正改变着全球工业,仅中国去年就买了9万台
查看>>
[零基础学JAVA]Java SE面向对象部分-06.面向对象基础(01)
查看>>
HP EVA4400/6400/8400/P6000数据恢复解决方案
查看>>
.Net Micro Framework 4.0正式开源
查看>>
WinDBG 技巧:设断点命令详解(bp, bu, bm, ba 以及bl, bc, bd, be)
查看>>
Update News
查看>>
小窍门-在EXECL表中加入下拉列表
查看>>