zoukankan      html  css  js  c++  java
  • 链表的巧解

    直观地想,如果想得到倒数第k 个节点,那么从后面往前数k个啰?这个不行,单向链表
    是行不通的,那么也可以这样,设有n个节点,那么向前往后数n-k+1个吧。但是这种方法
    要两次遍历链表,第一次是获得链表节点的个数n.第二次才找到倒数第k个节点。
    比较巧的方法是:
            设两个指针,一个指各头,另一个与前一个指针相隔k-1个节点,则当后面那个指针
    指向尾的时候,前面那个就指向了倒数第k个节点了。


    注意代码的鲁棒性:

    1. #ifndef COUNT_BACKWARD_H
    2. #define COUNT_BACKWARD_H
    3. #include<iostream>
    4. struct ListNode
    5. {
    6. int m_value;
    7. struct ListNode *m_pNext;
    8. };
    9. ListNode *findBackward_k(ListNode **head,int k_backward){
    10. if(head==NULL||*head==NULL||k_backward==0){
    11. return NULL ;
    12. }
    13. if((*head)->m_pNext==NULL&&k_backward==1){
    14. return *head;
    15. }
    16. ListNode *m_phead=*head;
    17. ListNode *pre_kbackward=m_phead;
    18. ListNode *m_pend=m_phead-1;
    19. int count_dis=k_backward;
    20. while(m_pend->m_pNext!=NULL){
    21. if(count_dis>0){
    22. m_pend=m_pend->m_pNext;
    23. count_dis--;
    24. continue;
    25. }
    26. pre_kbackward=pre_kbackward->m_pNext;
    27. m_pend=m_pend->m_pNext;
    28. }
    29. if(count_dis!=0){
    30. throw("invalid input value");
    31. }
    32. return pre_kbackward;
    33. }
    34. #endif

    发散思维:















  • 相关阅读:
    Centos7 JDK8安装配置
    select2
    docker 删除多个退出的容器
    redis 批量删除多个key
    Dockerfile 文件命令
    Docker部署go示例
    php 导入 excel 文件
    rabbitmq安装
    rabbitmq之php客户端使用实例
    k8s
  • 原文地址:https://www.cnblogs.com/yml435/p/4655491.html
Copyright © 2011-2022 走看看