面试题15:链表中倒数第k个结点
来源:互联网 发布:ssh 命令行带端口号 编辑:程序博客网 时间:2024/06/04 17:45
<span style="font-size:18px;">/*面试题15 题目:输入一个链表,输出该链表中的倒数第k个结点。本题从1开始计数,即链表的尾点是倒数第1个结点。 常规思路:遍历一次链表得到结点数n,再从头开始的第n-k+1个结点就是倒数第k个结点。也就是遍历两次链表。 一次遍历的方法:设置两个指针。第一个指针从头开始向前走k-1步,从第k步开始第二个指针也从头开始遍历。当第一个指针 到达尾结点时,第二个指针正好是倒数第k个结点。 */ListNode* FindKthToTail(ListNode* pListHead,unsigned int k){if(pListHead==NULL||k==0) //处理头结点为NULL,k为0时的异常return NULL;ListNode* pAhead=pListHead;ListNode* pBehind=NULL;for(int i=0;i!=k-1;++i){if(pAhead->m_pNext!=NULL) //处理结点总数小于k的异常pAhead=pAhead->m_pNext;elsereturn NULL;}pBehind=pListHead;while(pAhead->m_pNext!=NULL){pAhead=pAhead->m_pNext;pBehind=pBehind->m_pNext;}return pBehind;}//测试用例包含:功能测试(k在中间,头结点,尾结点),特殊输入测试(头结点为NULL,结点数小于k,k等于0)//相关题目:求链表的中间结点(一个指针一次一步,一个一次两步,快的到达尾结点时,慢的是中间结点),判断//一个链表是否形成了环形结构(一个一次一步,有一个一//次两步,快的追上慢的,形成了环形链表)。</span>
java代码实现,需要的node类在http://blog.csdn.net/cfcf0517/article/details/46674929
public Node findLastKthElement(Node head,int k){ if(k<1||k>this.length())return null;Node p1=head;Node p2=head;for(int i=0;i<k-1;i++)p1=p1.next;while(p1!=null){p1=p1.next;p2=p2.next;}return p2;}
0 0
- 面试题15:链表中倒数第k个结点
- 面试题15 链表中倒数第K个结点
- 面试题15:链表中倒数第k个结点
- 面试题15链表中倒数第k个结点
- 面试题15:链表中倒数第k个结点
- 面试题15:查找链表中倒数第k个结点
- 面试题15:链表中倒数第k个结点
- 面试题15:链表中倒数第k个结点
- 【面试题15】链表中倒数第K个结点
- 面试题15: 链表中倒数第k个结点
- 面试题15:链表中倒数第k个结点
- 面试题15 :链表中倒数第k个结点
- 面试题15—链表中倒数第K个结点
- 面试题15:链表中倒数第k个结点
- 面试题13:链表中倒数第k个结点
- 【面试题十五】链表中倒数第k个结点
- 剑指offer面试题 链表中倒数第K个结点
- 面试题15. 链表中倒数第k个结点
- codeforces 555C Case of Chocolate set操作
- Android Studio使用技巧
- 内部类相关2
- 内存分配与回收策略
- 师者 自省者也
- 面试题15:链表中倒数第k个结点
- 黑马程序员-通讯录
- Kernel Density Estimation Toolbox for MATLAB---问题记录
- 英语学习
- NSRunloop的简单认识
- 我们该用i++还是i--来进行循环?
- 如何设置通过PMU的gpio来唤醒系统
- 政府采购电子办公系统总结-思路篇
- java多线程之阻塞队列BlockingQueue的简单应用