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;
        }
    }
  • 相关阅读:
    POJ 3468 A Simple Problem with Integers
    BZOJ 4430 Guessing Camels
    POJ 2309 BST
    POJ 1990 MooFest
    cf 822B Crossword solving
    cf B. Black Square
    cf 828 A. Restaurant Tables
    Codefroces 822C Hacker, pack your bags!
    [HDU 2255] 奔小康赚大钱
    [BZOJ 1735] Muddy Fields
  • 原文地址:https://www.cnblogs.com/ttzz/p/13276200.html
Copyright © 2011-2022 走看看