题目形容

给定一个长度为n的单链表,删除倒数第K的节点,而后从头到尾输入每个节点的值。

输出

第一行蕴含两个整数N,k,k<=N.
第二行蕴含N个整数,代表从表头到表尾每个节点的值。
你须要建设单链表把这N个数串起来~

输入

按程序输入删除了倒数第K个节点后每个节点的值。

样例输出

5 2
1 2 3 4 5

样例输入

1 2 3 5

C++参考解答

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct LNode {    ElemType data;    struct LNode* next;}LNode,*LinkList;//尾插法创立单链表LinkList CreateList(LinkList& L,int N) {    L = (LinkList)malloc(sizeof(LNode));    L->next = NULL;    LNode* s, *r = L;    int i = 0,x;    while (i < N) {        scanf("%d", &x);        s = (LinkList)malloc(sizeof(LNode));        s->data = x;        s->next = r->next;        r->next = s;        r = s;        i++;    }    r->next = NULL;    return L;}//输入单链表void PrintList(LinkList L) {    LNode* s = L->next;    while (s) {        printf("%d ", s->data);        s = s->next;    }    printf("\n");}//按值查找LinkList GetElem(LinkList L,int i) {    int j = 1;    LNode* p = L->next;    if (i == 0) {        return  L;    }    if (i < 1) {        return NULL;    }    while (p && j < i) {        p = p->next;        j++;    }    return p;}//删除单链表中第i个结点bool ListDelete(LinkList& L, int i) {    LNode* p = GetElem(L, i - 1);    if (p == NULL) {        return false;    }    LNode* q = p->next;    if (q == NULL) {        return false;    }    p->next = q->next;    free(q);    q = NULL;    return true;}int main() {    int N, k;    scanf("%d%d", &N, &k);    int seqloc = N - k+1;    LinkList L;    CreateList(L,N);    ListDelete(L, seqloc);    PrintList(L);    return 0;}