链表中倒数第K个节点
2016-03-28 20:56
260 查看
题目描述:
输入一个链表,输出该链表中倒数第k个结点。
算法思想:
这种题型应该见过的,一般只要的涉及倒数。我们就需要设置两个指针了。这道题我们需要设置两个指针,先让一个指针向前移动k-1个位置(保持两个指针之间的距离为k-1),然后让第二个指针指向头结点,之后让两个指针同时向后移动,直到前边的指针指向NULL ,返回后边的指针即可。这样我们就扫描一遍的情况下找到了结果。
针对这种方法我们还可以解决像求链表的中间节点,求单向链表是否有环等;我们的解决办法就是让一个指针速度快一些(比如一次走两步)或者先让他走若干步即可;
算法实现:
参考书籍:
《剑指offer》
输入一个链表,输出该链表中倒数第k个结点。
算法思想:
这种题型应该见过的,一般只要的涉及倒数。我们就需要设置两个指针了。这道题我们需要设置两个指针,先让一个指针向前移动k-1个位置(保持两个指针之间的距离为k-1),然后让第二个指针指向头结点,之后让两个指针同时向后移动,直到前边的指针指向NULL ,返回后边的指针即可。这样我们就扫描一遍的情况下找到了结果。
针对这种方法我们还可以解决像求链表的中间节点,求单向链表是否有环等;我们的解决办法就是让一个指针速度快一些(比如一次走两步)或者先让他走若干步即可;
算法实现:
#include<iostream> #include<stdlib.h> using namespace std; typedef struct ListNode{ int data; struct ListNode *next; }ListNode; ListNode *FindKey(ListNode *pHead, int k){ if(pHead == NULL || k == 0){ //当输入的k<0或者头指针为空时,返回NULL return NULL; } ListNode *head = pHead; ListNode *index = NULL; for(int i = 0; i < k - 1; ++i){ if(head->next != NULL){ //当链表元素不足k个时,返回NULL head = head->next; } else{ return NULL; } } index = pHead; while(head->next != NULL){ head = head->next; index = index->next; } return index; } ListNode *CreateList(int x){ //创建链表 long num; ListNode *pHead = NULL; ListNode *p = NULL; while(x-- > 0){ cin>>num; ListNode* pNew = new ListNode(); if(pNew == NULL){ exit(EXIT_FAILURE); } pNew->data = num; pNew->next = NULL; if(pHead == NULL) { pHead = pNew; p = pHead; } else { p->next = pNew; p = p->next; } } return pHead; } int main(){ int n, k; ListNode *result = NULL; while(cin>>n>>k){ ListNode *pNode = CreateList(n); result = FindKey(pNode, k); if(result == NULL){ cout<<"NULL"<<endl; } else{ cout<<result->data<<endl; } } return 0; } /************************************************************** Problem: 1517 User: 。。。。。。 Language: C++ Result: Accepted Time:190 ms Memory:3104 kb ****************************************************************
参考书籍:
《剑指offer》
相关文章推荐
- log4j的ConversionPattern参数的格式含义-转
- 《leetCode》:Search a 2D Matrix II
- MachineLearning—Linear Regression(二)
- [XML]学习笔记(三)——DTD属性的声明及类型
- Nginx+keepalived主从双机热备自动切换架构
- Java中的内部类
- 单词翻转
- centos6.5上面HTOP实战!!! 推荐
- 44. Wildcard Matching
- 偷来的git操作命令
- SQL Server关于星期的处理(日期处理)
- 文件的内容操作
- 使用Timer和ScheduledThreadPoolExecutor执行定时任务
- 单链表 --- 冒泡排序 约瑟夫环
- Apache Arrow源码分析(二)——类型的封装
- rabbitmq—镜像队列
- 转载一篇优秀的关于python的字典的文章
- 比较分析与数组相关的sizeof和strlen
- document对象
- OpenCV Hog+SVM 学习