题解 | #输出单向链表中倒数第k个结点#

输出单向链表中倒数第k个结点

http://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d

#include "stdio.h"

typedef struct List{
    int val;
    struct List *next;
}list;

/*创建链表*/
list *creatlist(void)
{
    list *head = (list *)calloc(1,sizeof(list));
    head->next = NULL;
    return head;
}
/*创建新节点*/
list *creatnode(int data)
{
    list *newNode = (list *)calloc(1,sizeof(list));
    newNode->next = NULL;
    newNode->val = data;
    return newNode;
}
/*头插节点*/
void insertNodebyHead(list *headNode,int *data,int num)
{
    for(int i = 0; i < num; i++)
    {
        list *newNode = creatnode(*data);
        data++;
        newNode->next = headNode->next;
        headNode->next = newNode;
    }
}
/*返回倒数第k个节点*/
list *returnKnode(list *head,int n,int k)
{
    if(k == 0)
        return NULL;
    int len = n-k+1;
    list *pos = head;
    while(len)
    {
        pos = pos->next;
        len--;
    }
    return pos;
}

int main()
{
    int n = 0;
    while(scanf("%d",&n)!=EOF){
        int nums[10002];
        int k = 0;
        list *_list = creatlist();
        list *node;

        for(int i = 0; i < n; i++)
        {
            scanf("%d",&nums[i]);
        }
        scanf("%d",&k);
        int i = 0;
        int j = n - 1;
        int tmp;
        while(i < j){ /*懒得写尾插法了,所以反转一下吧哈哈哈*/
            tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
            i++;
            j--;
        }
        insertNodebyHead(_list,nums,n);

        node= returnKnode(_list,n,k);
        if(node == NULL)
             printf("0\n");
        else
            printf("%d\n",node->val);
    }
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务