【14】链表中倒数第k个结点
2016-06-24 10:31
309 查看
【14】链表中倒数第k个结点
时间限制:1秒空间限制:32768K
本题知识点: 链表
题目描述
输入一个链表,输出该链表中倒数第k个结点牛客网题目链接:点击这里题目
vs2010全部代码
#include<iostream> using namespace std; struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { ListNode* P=pListHead; ListNode* End=pListHead; int count=0; while(End) { End=End->next; count++; if(count>k) { P=P->next; } } if(count<k) return NULL; else return P; } }; //测试用例:6,{1,2,3,4,5} //对应输出应该为:{} int main() { Solution S1; ListNode* L1=NULL; ListNode* PL=NULL; ListNode* s=NULL; //创建链表 int n; cin>>n; int tmp; cout<<"输入第"<<1<<"个结点值"; cin>>tmp; s=new ListNode(tmp); PL=s; L1=PL; for(int i=1; i<n; i++) { int tmp; cout<<"输入第"<<i+1<<"个结点值"; cin>>tmp; s=new ListNode(tmp); PL->next=s; PL=PL->next; } //输出链表 cout<<endl; PL=L1; for(int i=0; i<n; i++) { cout<<PL->val<<"->"; PL=PL->next; } cout<<endl; cout<<S1.FindKthToTail(L1,5)->val<<endl; }
改进的代码:
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(!pListHead || k==0) return NULL; ListNode* p1=pListHead;k--; ListNode* p2=NULL; while(k--){ p1=p1->next; if(!p1) return NULL; } p2=pListHead; while(p1 && p1->next){ p1=p1->next; p2=p2->next; } return p2; } };
考虑三种情况:
1. 输入的pLIstHead为空指针
2. 输入的pListHead为头结点的链表的结点总数少于k
3. 输入的参数k为0.
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C#模拟链表数据结构的实例解析
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- Node.js环境下JavaScript实现单链表与双链表结构
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- Java模拟有序链表数据结构的示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- PHP中模拟链表和链表的基本操作示例
- C语言双向链表的表示与实现实例详解
- js链表操作(实例讲解)