剑指offer--链表中倒数第k个结点
2017-10-13 19:25
435 查看
面试题15:链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。
程序员的面试宝典有一个类似的问题:
如果给一个链表,要求只能遍历一遍,怎么求出链表最中间的元素呢?
可以给两个指针,p1 = p1->m_pNext; p2 = p2->m_pNext->m_pNext;当p2走到链表尾的时候,p1就走到了链表中间。
代码如下:
题目:输入一个链表,输出该链表中倒数第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; } }
相关文章推荐
- 剑指offer之十三---链表中倒数第k个结点
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
- 【剑指offer】3.4代码的鲁棒性——面试题15:链表中倒数第k个结点
- 剑指Offer:链表中倒数第k个结点
- 【剑指offer】九,链表中倒数第k个结点
- 剑指offer——链表中倒数第k个结点
- 剑指offer--链表中倒数第k个结点
- 剑指offer-算法题练习:part16 链表中倒数第k个结点
- 【剑指offer】链表中倒数第k个结点
- 剑指Offer之链表中倒数第k个结点
- 【剑指offer】链表中倒数第k个结点
- 剑指offer 之 输出链表的倒数第K个结点
- 剑指offer-链表中倒数第k个结点
- 剑指offer-题目1517:链表中倒数第k个结点 (2013.12.29)
- 剑指offer代码解析——面试题15求链表中倒数第K个结点
- 剑指offer 链表中倒数第k个结点
- 剑指offer-链表中倒数第k个结点
- 剑指Offer_14_链表中倒数第k个结点
- 剑指offer代码解析——面试题15求链表中倒数第K个结点
- 剑指offer面试题 链表中倒数第K个结点