【融博笔试题】查找单链表倒数第k个结点的值
2013-03-19 21:02
211 查看
继华赛之后,又一次倒在面试门前。基础不扎实就是不行啊!
下来做完这道题,顺便复习单链表。代码如下:
能力有限,理解得到位的,不到位的,都写在注释里了。错误之处请指出,谢谢!
下来做完这道题,顺便复习单链表。代码如下:
//--------------------------------------------------------------------------- #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个结点
- 程序员面试题精选100题(09)-查找链表中倒数第k个结点
- 算法题9 查找链表中倒数第k个结点
- 每天一道算法题7 查找链表中倒数第k个结点
- 笔试面试,单链表相关(3)遍历一次找中间结点、倒数第K个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 剑指offer 15---查找单链表的倒数第k个节点,要求只能遍历一次链表
- 查找单链表的倒数第k个节点,要求只能遍历一次链表
- 查找链表中倒数第k个结点
- 查找单链表的倒数第k个节点
- 6.查找单链表中的倒数第k个结点
- C语言:【单链表】查找单链表的倒数第k个节点,要求只能遍历一次
- 查找链表中倒数第k个结点
- 查找单链表倒数第K个节点和以及逆置单链表
- 逆置/反转单链表+查找单链表的倒数第k个节点,要求只能遍历一次链表
- 单链表查找倒数第i个结点,linux纯C实现
- 查找单链表的第k个结点
- 剑指offer 面试题15 找到单链表倒数第k个结点
- 13.查找链表中倒数第k个结点