【剑指offer-解题系列(14)】链表中倒数第k个节点
来源:互联网 发布:java可变参数不传入 编辑:程序博客网 时间:2024/06/05 00:27
题目描述
输入一个链表,输出该链表中倒数第k个结点。
分析
用两个指针,第一个先向前跳k个节点,然后两个指针同时向后跳动,第一个指针到达末尾时候,第二个指针就指向倒数第k个节点了。
也可以用递归,用一个变量计数。
代码实现
/////////////////////////////////////////递归版本
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode*p = NULL;
int i = 0;
recur( pListHead, i, k,p);
return p;
}
void recur(ListNode* head,int & i,int k,ListNode*&p){
if(head==NULL){
i=0;
p==NULL;
return ;
}
else
{
recur(head->next,i,k,p);
i++;
if(i==k)
p = head;
}
}
ListNode*p = NULL;
int i = 0;
recur( pListHead, i, k,p);
return p;
}
void recur(ListNode* head,int & i,int k,ListNode*&p){
if(head==NULL){
i=0;
p==NULL;
return ;
}
else
{
recur(head->next,i,k,p);
i++;
if(i==k)
p = head;
}
}
/////////////////////////////////////////两个指针版本
ListNode* FindKthToTail2(ListNode* pListHead, unsigned int k) {
ListNode*p =pListHead,*q =pListHead;
if(p==NULL)return NULL;
int i;
for( i=0 ;i<k&&p!=NULL;i++){
p=p->next;
}
if(i<k)return NULL;
while(p!=NULL){
p=p->next;
q=q->next;
}
return q;
}
ListNode* FindKthToTail2(ListNode* pListHead, unsigned int k) {
ListNode*p =pListHead,*q =pListHead;
if(p==NULL)return NULL;
int i;
for( i=0 ;i<k&&p!=NULL;i++){
p=p->next;
}
if(i<k)return NULL;
while(p!=NULL){
p=p->next;
q=q->next;
}
return q;
}
阅读全文
0 0
- 【剑指offer-解题系列(14)】链表中倒数第k个节点
- 【剑指offer系列】 链表中倒数第k个节点___15
- 剑指offer(16):链表中倒数第k个节点
- #剑指offer--(16)链表中倒数第k个节点
- 链表中倒数第k个节点(剑指Offer 第14 题)
- 剑指Offer之链表中倒数第K个节点
- 来自《剑指offer》 链表中倒数第k个节点
- 剑指offer--15.链表中倒数第k个节点
- 剑指Offer :寻找链表中倒数第K个节点
- 剑指offer 链表中倒数第k个节点
- 剑指offer-链表中倒数第K个节点-php
- 剑指offer-链表中倒数第K个节点
- 剑指offer-14.链表中倒数第k个节点
- 剑指offer---链表中倒数第k个节点
- 剑指offer--链表中倒数第K个节点
- 剑指Offer----链表中倒数第k个节点
- 剑指offer——链表中倒数第k个节点
- 剑指Offer——链表中倒数第K个节点
- 《深入理解Java虚拟机》读书笔记2017-5-21
- boost 智能指针
- 逆向-识别循环
- 《Spring in action》——学习总结(三)
- react vr-打包代码放到网站上
- 【剑指offer-解题系列(14)】链表中倒数第k个节点
- c++ 学习笔记
- 模拟实现shell
- 神经网络:2)Hi,死宅的感知器
- js将string转化为json
- 进程同步
- c++ 文件操作
- JavaScript改变this指向的3种方法(代码说明)
- Java命令行参数类 Commons CLI使用