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
    ****************************************************************/


  • 相关阅读:
    通用Struts2 配置文件Filterwebxml
    spring+hibernate+struts2应用mysql数据库乱码问题
    区域医疗卫生平台建设(五) HL7 RIM
    在昆山的日子终于要结束了
    医疗基本知识之医嘱篇(三)医嘱中药物、药品、处方的处理
    区域卫生信息平台建设(一)政策
    区域卫生信息平台建设(四)概念模型与逻辑模型
    区域卫生信息平台建设(二)基本功能
    区域卫生信息平台建设(三)数据模型基本概念
    平板电脑选择
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7065714.html
Copyright © 2011-2022 走看看