链表中倒数第k个结点

来源:互联网 发布:java中的数据结构 编辑:程序博客网 时间:2024/05/16 04:22

1.问题描述

输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第一个结点。例如一个链表有6个结点,从头开始它们的值依次是1,2,3,4,5,6。这个链表的倒数第3个结点是值为4的结点。(来自《剑指offer》)


2.分析

倒数第k个结点我们可以声明2个指针让第一个指针先走k-1步,那么这俩个指针相隔距离为k。待第一个指针指向链表末尾时,第二个指针即为倒数第k个结点。但是需要注意一下几个问题,即 k 为 0 和 假如链表 结点不够k-1个


3.代码 

#include <stdio.h>#include <stdlib.h>typedef struct node{    int data;        struct node* next;    }ListNode;ListNode* FindKthToTail(ListNode* head,unsigned int k){        if(head == NULL || k == 0)    {        return NULL;    }        ListNode *ahead = head;        for (int i = 0; i < k-1; i++)    {        if (ahead->next)        {            ahead = ahead->next;        }        else        {            return  NULL;        }    }        ListNode *behind = head;        while (ahead->next)    {        ahead = ahead->next;                behind = behind->next;    }        return  behind;    }


0 0