《程序员面试金典》--找出链表中倒数第k个节点
来源:互联网 发布:java concurrent i自增 编辑:程序博客网 时间:2024/06/03 08:09
题目描述:
给定一个单向链表的头结点,找出链表中倒数第k个节点
方法1(求长度):
可以首先遍历链表,求出链表的长度L,再继续从头节点开始遍历一次链表,走到L-K的位置便是所求的节点。这样就要遍历两次链表O(2N);
方法2(递归实现):
递归遍历链表,当达到链表末尾时候,传递一个值为0的计数器,之后每次调用将该计数器加1,当计数器等于k时,便将该节点返回,只需要遍历一次链表,但是需要递归遍历消耗栈空间。
代码实现如下:
BiTree* find1(BiTree* head,int k, int &i){if(head==NULL)return NULL;BiTree *nd=find1(head->next,k,i);++i;if(i==k)return head;return nd;}
方法3(快慢指针实现):
可以两个移动的指针实现,先让第一个指针遍历k个节点,然后第二个指针从头结点和第一个指针同步移动,当第一个指针达到指针末尾的时候,第二个指针便是倒数第k个节点,这样只需要一次遍历链表,而且空间复杂度为O(1)。
代码实现如下:
class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { int count=1; ListNode* head=pListHead; if(!pListHead) return NULL; while(pListHead->next!=NULL){ count++; pListHead=pListHead->next; } if(count<k) return NULL; int i=1; while(i++<count-k+1){ head=head->next; } return head; }};
0 0
- 《程序员面试金典》--找出链表中倒数第k个节点
- 程序员面试金典: 9.2链表 2.2找出单向链表中倒数第k个节点
- [程序员面试宝典]链表中倒数第K个节点
- 【程序员面试金典】链表中倒数第k个结点
- [Java] 找出链表中倒数第k个节点
- 3. 找出链表中倒数第k个节点
- 找出单向链表中倒数第k个节点的算法
- 在链表中找出倒数第K个节点
- 程序员面试金典 2.2 链表中倒数第k个结点
- 程序员面试金典第二章:链表(2) 链表中倒数第k个结点
- 程序员面试金典第二章:链表(3) 链表中倒数第k个结点
- 《Cracking the Coding Interview程序员面试金典》----链表中倒数第k个结点
- 《Cracking the Coding Interview程序员面试金典》----链表中倒数第k个结点
- 程序员面试金典——链表中倒数第k个结点
- 程序员面试金典:翻转子串、链表中倒数第k个结点
- 找出链表中倒数第K个结点
- 单向链表_找出倒数第K个节点
- 找出单链表的倒数第k个节点
- No module named redis_cache.cache
- linux网络设置与网卡的简单设计
- 页面滚动高度问题,返回顶部
- java Map及Map.Entry详解
- session的生命周期
- 《程序员面试金典》--找出链表中倒数第k个节点
- 利用Python 的 Pandas进行数据分析
- Oracle数据库SQL语句大全
- Windows下如何查看android中指定APP的log日志
- 设置textView的 输入框
- hdoj4705Y【树形dp+简单组合数学】
- MongoDB学习日记 - java代码(五):增删改查
- java三大框架起源
- 字典