求链表的倒数第K个节点
来源:互联网 发布:gta5画面优化设置 编辑:程序博客网 时间:2024/04/28 19:04
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。在遍历时维持两个指针,第一个指针从链表的头指针开始遍历,在第k-1步之前,第二个指针保持不动;在第k-1步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。
程序如下:
/********************************************题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。我们在遍历时维持两个指针,第一个指针从链表的头指针开始遍历,在第k-1步之前,第二个指针保持不动;在第k-1步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。**********************************************/#include<iostream>using namespace std;typedef struct node{ int data; struct node *next;}Node,*List;List createList(int N){ List head = new node; head->data = 0; head->next=NULL; int count = 1991; List p = head; while(count<N+1991) { count++; List s = new node; s->data = count; s->next = NULL; p->next = s; p = s; } return head;}void traverse(List head){ if(head == NULL) { return; } List p = head->next; while(p) { cout<<p->data<<" "; p = p->next; } cout<<endl;}List find(List head,int index){ int count = 0; List first = head; List second = NULL; while(first&&count<index)//first首先找到第index个元素 { first = first->next; count++; } if(first!=NULL)//如果没有到链表尾 { second = head; while(first!=NULL) { first = first->next; second = second->next; } } return second;}int main(){ int N = 22,n; List head = createList(N); traverse(head); cout<<"请输入要查询倒数第几个数:"<<endl; while(cin>>n) { List num = find(head,n); if(num!=NULL) { cout<<"倒数第"<<n<<"个数是 :"<<num->data<<endl; } else { cout<<"没有这个数(输入数据大于链表长度)"<<endl; } cout<<"请输入要查询倒数第几个数:"<<endl; } return 0;}/****************************运行结果:1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 20072008 2009 2010 2011 2012 2013请输入要查询倒数第几个数:1倒数第1个数是 :2013请输入要查询倒数第几个数:2倒数第2个数是 :2012请输入要查询倒数第几个数:10倒数第10个数是 :2004请输入要查询倒数第几个数:19倒数第19个数是 :1995请输入要查询倒数第几个数:22倒数第22个数是 :1992请输入要查询倒数第几个数:23没有这个数(输入数据大于链表长度)请输入要查询倒数第几个数:44没有这个数(输入数据大于链表长度)请输入要查询倒数第几个数:^Z******************************/
- 求链表的倒数第K个节点
- 求链表的倒数第K个节点
- 求链表的倒数第k个节点
- 求链表的倒数第k个节点
- 求链表的倒数第k个节点
- 找链表的倒数第k个节点
- 找链表的倒数第k个节点
- 单链表的倒数第K个节点
- 求链表倒数第k个节点
- 求链表倒数第K个节点
- 求链表中的倒数第K个节点
- 求链表倒数第k个节点
- 第11题 求链表倒数第k个节点
- 求链表的倒数第K个节点,如果K大于链表长度则返回NULL
- 输出链表的倒数第k个节点
- 输出单链表的倒数第K个节点
- 寻找链表的倒数第k个节点
- 寻找单向链表的倒数第k个节点
- 思路小记 - 彻底干掉惠普笔记本的大小写切换提示框
- 关于无法从“const char [4]”转换为“LPCWSTR”
- uva116 - Unidirectional TSP(简单动规)
- macbook 安装windows
- 第5章 建立辅助模型—活动图
- 求链表的倒数第K个节点
- 错误汇总
- 第5章 建立辅助模型—状态机图
- 第5章 建立辅助模型—包图
- 黑马程序员-----IO的学习
- Matlab中控制图像显示边界,subplot间距等
- C#交错数组
- C#数组的sort和reverse
- 启动Oracle报错:本地计算机上的OracleOraDb11g_homeTNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。