题目形容
给定一个长度为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;}