zoukankan      html  css  js  c++  java
  • 034链表中倒数第k个结点(keep it up)

    剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1517

    题目描写叙述:

    输入一个链表。输出该链表中倒数第k个结点。
    (hint: 请务必使用链表。)

    输入:

    输入可能包括多个測试例子,输入以EOF结束。


    对于每一个測试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素。
    输入的第二行包含n个数t(1<=t<=1000000):代表链表中的元素。

    输出:

    相应每一个測试案例。
    若有结果。输出对应的查找结果。否则,输出NULL。

    例子输入:
    5 2
    1 2 3 4 5
    1 0
    5
    例子输出:
    4
    NULL
    这个题目比較简单直接上代码:

    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct SNode
    {
        int data;
        struct SNode *next;
    }SNode;
     
    SNode* createNode(int vData)
    {
        SNode *Node = (SNode*)malloc(sizeof(SNode));
        Node->data  = vData;
        Node->next  = NULL;
        return Node;
    }
     
    void deleteNode(SNode **vNode)
    {
        (*vNode)->next = NULL;
        free(*vNode);
        *vNode = NULL;
    }
     
    SNode* createLinkList(int vN)
    {
        int    i;
        int    Data;
        SNode *Head;
        SNode *Node;
        SNode *TempNode;
     
        scanf("%d", &Data);
        Head = createNode(Data);
        TempNode = Head;
     
        for (i = 1; i < vN; ++i)
        {
            scanf("%d", &Data);
            Node = createNode(Data);
            TempNode->next = Node;
            TempNode = Node;
        }
     
        return Head;
    }
     
    SNode* findKey(SNode *vHead, int vN, int vK)
    {
        if (vN == vK) return vHead;
     
        int    i;
        SNode *pNode;
        SNode *qNode;
     
        i     = 0;
        pNode = vHead;
        qNode = vHead;
     
        while (i < vK && qNode != NULL)
        {
            qNode = qNode->next;
            ++i;
        }
     
        if (qNode == NULL) return NULL;
     
        while (qNode != NULL)
        {
            pNode = pNode->next;
            qNode = qNode->next;
        }
     
        return pNode;
    }
     
    void destroyLinkList(SNode **vHead)
    {
        SNode *Node;
        while (*vHead != NULL)
        {
            Node = (*vHead)->next;
            deleteNode(vHead);
            *vHead = Node;
        }
    }
     
    int main()
    {
        int N;
        int K;
        SNode *Head;
        SNode *Ret;
     
        while (scanf("%d %d", &N, &K) != EOF)
        {
            if (K == 0 && K > N) 
            {
                printf("NULL
    ");
                continue;
            }
     
            Head = createLinkList(N);
            Ret  = findKey(Head, N, K);
            if (Ret == NULL)
            {
                printf("NULL
    ");
            }
            else
            {
                printf("%d
    ", Ret->data);
            }
     
            destroyLinkList(&Head);
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1517
        User: 
        Language: C
        Result: Accepted
        Time:100 ms
        Memory:912 kb
    ****************************************************************/


  • 相关阅读:
    jQuery的简单应用
    JQuery事件
    [django]数据导出excel升级强化版(很强大!)
    [Django]用户权限学习系列之权限管理界面实现
    [Django]用户权限学习系列之设计自有权限管理系统设计思路
    [jquery]显示隐藏div标签的几种方法
    [Django]用户权限学习系列之User权限基本操作指令
    [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)
    [Django]用户权限学习系列之Permission权限基本操作指令
    [python]set集合学习
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7065714.html
Copyright © 2011-2022 走看看