zoukankan      html  css  js  c++  java
  • 剑指offer(十四):链表中倒数第k个结点

    题目描述

    输入一个链表,输出该链表中倒数第k个结点。
    C++实现:
    先计算链表中有多少个结点,总数记为count
    那么倒数第k个结点即顺数第count-k+1个结点
    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
            ListNode * p = pListHead;
            int count = 0;
            while(p){
                count++;
                p = p->next;
            }
            ListNode * q = {};
            if(k>count) return q;
            else{
                q = pListHead;
                int i = 1;
                while(i){
                    if(i == count-k+1){
                        return q;
                    }
                    q = q->next;
                    i++;
                }
            }
            
        }
    };

    缺点:需要遍历两次链表

     讨论里面其他人的思想:

    //p指针先跑,并且记录节点数,当p指针跑了k-1个节点后,pre指针开始跑,
    //当p指针跑到最后时,pre所指指针就是倒数第k个节点
    用java语言实现该思想:
    public class Solution {
        public ListNode FindKthToTail(ListNode head,int k) {
            ListNode p = head;
            ListNode q = head;
    
            int count = 0;
            while(p!=null){
                count++;
                if(count > k)
                    q = q.next;
                p = p.next;
            }
            return count>=k?q:null;
        }
    }
  • 相关阅读:
    Login02
    工作笔记
    vim 使用笔记
    linux 命令常用笔记
    百度面试测试开发工程师内容
    sublime 快捷键
    如何升级php版本---从php5.5.12 升级php7.1.5 wamp实践
    如何新建自己的服务
    php.ini 文件中配置的意义注释
    linux 如何打包代码
  • 原文地址:https://www.cnblogs.com/ttzz/p/13276200.html
Copyright © 2011-2022 走看看