zoukankan      html  css  js  c++  java
  • 剑指Offer 链表中倒数第k个结点

    时间限制:1秒 空间限制:32768K 热度指数:389846
    本题知识点: 链表

     算法知识视频讲解

    题目描述

    输入一个链表,输出该链表中倒数第k个结点。
    给出代码:
    /*
    struct ListNode {
    	int val;
    	struct ListNode *next;
    	ListNode(int x) :
    			val(x), next(NULL) {
    	}
    };*/
    class Solution {
    public:
        ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        
        }
    };
    

     

    思路:设置两个人指针p和q,p先跑到k,然后p和k一起跑,我们假设链表的总长度为n,那么p到最后会跑n-k,正好就是倒数第k个结点的位置。

    写的时候很多细节没有注意,要考虑链表为空和k=0的情况,还有k有可能比链表的长度还要长 

    AC代码:

    class Solution {
    public:
        ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
            if(pListHead == NULL || k == 0) return NULL;
            ListNode* p;
            ListNode* q;
            p = pListHead;
            q = pListHead;
            for(int i = 1; i < k; i++) {
                if(p->next != NULL) p = p->next;
                else return NULL;
            }
            while(p->next != NULL) {
                p = p->next;
                q = q->next;
            }
            return q;
    
        }
    };
    

      

  • 相关阅读:
    改变字段的值
    创建新的对象
    根据方法的名称来执行方法
    获取类的字段
    获取构造器的信息
    找出类的方法
    开始使用Reflection
    反射简介
    leetcode501
    leetcode235
  • 原文地址:https://www.cnblogs.com/Hyouka/p/9262374.html
Copyright © 2011-2022 走看看