【融博笔试题】查找单链表倒数第k个结点的值
来源:互联网 发布:linux 拷贝命令 编辑:程序博客网 时间:2024/06/06 15:45
继华赛之后,又一次倒在面试门前。基础不扎实就是不行啊!
下来做完这道题,顺便复习单链表。代码如下:
//---------------------------------------------------------------------------#include <iostream>using namespace std;//融博C++笔试题//单链表中找出倒数第k个结点的值//最后一个结点指向NULL//---------------------------------------------------------------------------typedef int elemType;typedef struct LinkNode{ elemType data; LinkNode* next;}*L;int cnt; //结点个数//---------------------------------------------------------------------------//创建链表void Create(LinkNode *L){ L->next=NULL; cin>>L->data; LinkNode *r=L; while( 1 ) { LinkNode *p=new LinkNode; //when delete? cin>>p->data; if ( getchar() =='#' ) break; p->next=NULL; r->next=p; r=p; }}//---------------------------------------------------------------------------//遍历链表void display(LinkNode *L, int &cnt) { cnt=0; LinkNode *p=L; while ( p->next != NULL ) { cout<<p->data<<' '; p=p->next; cnt++; } cout<<p->data<<' '; cnt++;}//---------------------------------------------------------------------------//销毁链表void distruct(LinkNode *L) //按节点删除,还是删除头即可?应该是前者吧,否则造成内存泄漏{ int c=0; while (L->next) { LinkNode *r=L; LinkNode *p=L->next; while ( p->next ) { r=p; p=p->next; } cout<<p->data<<' '; delete p; c++; r->next=NULL; } cout<<L->data<<endl; delete L; c++; if(c==cnt) cout<<"链表L已销毁!"<<endl; else exit(0);}//---------------------------------------------------------------------------//查找链表中倒数第k个结点的值 int findK(LinkNode* L, int k){ if ( k>cnt || k<1 ) { cout<<endl<<"超出限制的k值"; return -9999; } LinkNode *p=L; int m=1; while(m++<cnt-k+1) { p=p->next; } return p->data; } //---------------------------------------------------------------------------int main(int argc, char* argv[]){ LinkNode *L= new LinkNode; Create(L); display(L, cnt); //查找倒数第k个结点,cin有误,百度了一下像下面这样解决: cin.clear(); //错误位重置,这句话一定要写的 cin.sync(); //清空缓存区,还可以用fflush(stdin); //也可以用cin.ignore(),但这个只清除一个字符 int k; cout<<endl<<"查找倒数第k个结点的值,请输入k:"; cin>>k; int val = findK(L, k); cout<<"倒数第"<<k<<"个结点的值为"<<val<<endl; /////////////////// distruct(L); return 0;}//---------------------------------------------------------------------------
能力有限,理解得到位的,不到位的,都写在注释里了。错误之处请指出,谢谢!
- 【融博笔试题】查找单链表倒数第k个结点的值
- 查找并输出单链表的倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第 k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k 个结点
- 查找链表中倒数第k个结点
- 查找单链表中倒数第k个结点
- 查找倒数第K个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表的倒数第K个结点
- C#编写一个控制台应用。输入一组整数,输出所有的奇数。
- u-boot-2009.08移植笔记二,平台TQ2440
- 计算机视觉 顶级研究团队之一
- u-boot-2009.08移植笔记三,平台TQ2440 .
- C++类的静态成员
- 【融博笔试题】查找单链表倒数第k个结点的值
- git常用命令-------自用-------持续更新中
- java初接触
- u-boot-2009.08移植笔记四,平台TQ2440 .
- JAVA学习第三回:JAVA语法基础:大致了解
- hdu3977 - fibonacci模p的周期
- 图
- u-boot-2009.08移植笔记五,平台TQ2440 .
- JS解析XML文档中的数据(兼容各个浏览器)