• 剑指offer-链表中倒数第k个结点


    题目描述

    输入一个链表,输出该链表中倒数第k个结点。

     

    解题思路

    本题是典型的双指针法链表题,可以用两个指针:first和second分别指向头结点,其中first先往前走k步,然后first和second同时向前走,直到first指向NULL,此时second指向的节点便是链表中倒数第k个结点。注意特殊情况的处理,给出的链表头指针可能为空,k也可能为0,所以首先判断若不符合条件则返回NULL;其次若k大于链表的长度,可能first走不到第n-k+1个节点,为了处理这种情况,second先指向NULL,直到first走了k步之后在指向头结点,这样最后直接返回second即可。

     

    代码

     1 /*
     2 struct ListNode {
     3     int val;
     4     struct ListNode *next;
     5     ListNode(int x) :
     6             val(x), next(NULL) {
     7     }
     8 };*/
     9 class Solution {
    10 public:
    11     ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
    12         if(pListHead == NULL || k == 0)
    13             return NULL;
    14         ListNode* first = pListHead;
    15         ListNode* second = NULL;
    16         while(first != NULL){
    17             if(k > 0){
    18                 first = first->next;
    19                 k--;
    20                 if(k == 0)
    21                     second = pListHead;
    22             }
    23             else{
    24                 first = first->next;
    25                 second = second->next;
    26             }
    27         }
    28         return second;
    29     }
    30 };
  • 相关阅读:
    input 正则
    .net ashx Session 未将对象引用到实例
    js 时间和时间对比
    c# Repeater 和 AspNetPager
    c#后台 极光推送到Android 和IOS客户端
    select scope_identity()
    redhat7.4安装git(按照官网从源码安装)
    redhat7.4安装gitlab
    ES6模板字符串
    初次接触webpack
  • 原文地址:https://www.cnblogs.com/wmx24/p/8668320.html
Copyright © 2020-2023  润新知