链表中倒数第k个结点
来源:互联网 发布:淘宝专柜价是正品吗 编辑:程序博客网 时间:2024/06/03 19:47
题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路:
输入一个链表,输出该链表中倒数第k个结点。
解题思路:
用两个指针p,pre指向链表的头结点,先将p向前移动k-1个位置,随后p,pre一起向后移动,当p到达链表尾部时,pre则为倒数第k个结点
如图所示,假设k=4,先将p先前移动3个位置,再将p和pre一起移动,当p到达链表尾部,pre则到达k所指的位置
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 =NULL; ListNode *pre = NULL; p =pListHead; pre =pListHead; if(pListHead==NULL||k<=0)return NULL; for(int i=1;i<k;++i) { //这里一定要判断p->next是否为空 if(p->next!=NULL) { p=p->next; } else { returnNULL; } } while(p->next!=NULL) { p=p->next; pre=pre->next; } return pre; }};另外也可以通过栈来实现,先将每个结点压入栈中,在依次将栈中的前k个结点出栈,第k个结点就是链表倒数第k个结点
#include<stack>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 =NULL; ListNode *pre = NULL; p =pListHead; //count用来记住链表的结点数 int count=0; Stack<ListNode> stac = new Stack<ListNode>(); if(pListHead==NULL||k<=0)return NULL; while(p!=NULL) { stack.push(p); p=p->next; count++; } //若结点数小于k则返回空 if(count<k)return NULL; //依次将栈中的前k个结点出栈 for(int i=k;i>0;k--) { pre=stack.pop(); } return pre; }};
0 0
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第 k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 输出链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 链表中倒数第k个结点
- 链表中倒数第k个结点
- 查找链表中倒数第k 个结点
- 链表中倒数第k个结点
- 查找链表中倒数第k个结点
- 链表中倒数第k个结点
- 链表中倒数第k个结点[数据结构]
- 链表中倒数第k个结点
- ffmpeg 教程之 rtmp 推送器
- 移动后台服务Bmob基础篇(一)
- 常用排序算法之冒泡排序
- linux c详解
- 剑指offer--面试题57:删除链表中重复的结点
- 链表中倒数第k个结点
- C3P0连接池+MySQL的配置以及wait_timeout问题的解决
- Android-Bug收集
- 字符串不能按照 小数点分割的解决办法
- LPC2294对片外EEPROM(24C04)进行读写操作,如何确定24C02EEPROM地址
- 果蝇神经元聚类
- LeetCode oj 406. Queue Reconstruction by Height(优先队列)
- 剑指offer面试题14: 调整数组顺序使奇数位于偶数前面
- MySQL创建全文索引