剑指offer--链表中倒数第k个结点
来源:互联网 发布:一般淘宝哪些假货多 编辑:程序博客网 时间:2024/06/06 05:54
面试题15:链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。
struct ListNode{ int m_nKey; ListNode *m_pNext;};ListNode *kFromTail(ListNode *head,int k){ if(head == NULL) return NULL; ListNode *p1 = head; ListNode *p2 = head; for(int i = 0;i<k-1;i++)//p1往后走了k个结点,此时p1和p2相差k个结点 { if(p1->m_pNext != NULL) p1 = p1->m_pNext; else return NULL; } //当p1走到链表的尾结点时,p2为链表倒数第k个元素 while(p1->m_pNext != NULL) { p1 = p1->m_pNext; p2 = p2->m_pNext; } return p2;}void Show(ListNode *head){ for(ListNode *p=head;p!=NULL;p=p->m_pNext) { cout<<p->m_nKey<<ends; } cout<<endl;}int main(){ ListNode *head = NULL; for(int i=0;i<10;i++) { InsertTail(&head,i); } Show(head); ListNode *p = kFromTail(head,3); if(p != NULL) { cout<<p->m_nKey<<endl; } }
程序员的面试宝典有一个类似的问题:
如果给一个链表,要求只能遍历一遍,怎么求出链表最中间的元素呢?
可以给两个指针,p1 = p1->m_pNext; p2 = p2->m_pNext->m_pNext;当p2走到链表尾的时候,p1就走到了链表中间。
代码如下:
ListNode *middleNumber(ListNode *head){ if(head == NULL) return NULL; ListNode *p1 = head; ListNode *p2 = head; while(p1->m_pNext!=NULL && p1->m_pNext->m_pNext!=NULL) { p1 = p1->m_pNext->m_pNext; p2 = p2->m_pNext; } return p2;}void Show(ListNode *head){ for(ListNode *p=head;p!=NULL;p=p->m_pNext) { cout<<p->m_nKey<<ends; } cout<<endl;}int main(){ ListNode *head = NULL; for(int i=0;i<10;i++) { InsertTail(&head,i); } Show(head); ListNode *p = middleNumber(head); if(p != NULL) { cout<<p->m_nKey<<endl; } }
阅读全文
0 0
- 剑指Offer之链表中倒数第k个结点
- 剑指offer-15:链表中倒数第k个结点
- 剑指offer系列源码-链表中倒数第k个结点
- 剑指offer--链表中倒数第k个结点
- 剑指Offer之 - 链表中倒数第k个结点
- 剑指offer:链表中倒数第k个结点(链表)
- 剑指Offer-链表中倒数第k个结点
- 剑指offer——链表中倒数第k个结点
- 链表中倒数第k个结点(剑指offer)
- 《剑指offer》链表中倒数第k个结点
- 剑指 offer:链表中倒数第k个结点
- 剑指offer—链表中倒数第k个结点
- 剑指offer--链表中倒数第k个结点-java
- 《剑指offer》——链表中倒数第k个结点
- [剑指offer-1517]链表中倒数第k个结点
- 剑指offer 链表中倒数第k个结点
- 剑指offer-链表中倒数第k个结点
- 剑指Offer--015-链表中倒数第k个结点
- Java并发编程的艺术-第四章之Java并发基础
- 轮播布局
- IEtester
- 关于获取button控制或者编辑框控件或者静态文本框控件字符的操作
- 哈哈日语 | 超实用商务日语问题
- 剑指offer--链表中倒数第k个结点
- iOS 本地通知:UILocalNotification
- Android 组件学习笔记
- BZOJ 3566 概率充电器 (树形 概率DP)
- Unity Shader Example 28 (Reuse Depth Buffer)
- bzoj 1787: [Ahoi2008]Meet 紧急集合 lca
- 洛谷 P2038 无线网络发射器选址
- web笔记(10/13)-----课程内容
- Mybatis介绍