#include <stdio.h> #include <stdlib.h> typedef struct node { int val; struct node *next; } Node; Node *newNode(int val); void freeList(Node *head); Node *removeLastK(Node *head, int k); int main(void) { int n, k, val; Node *node, *head = NULL, *cur = NULL; scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) { scanf("%d", &val); node = newNode(val); if (head == NULL) { head = cur = node; continue; } cur->next = node; cur = cur->next; } head = removeLastK(head, k); cur = head; while (cur != NULL) { printf("%d", cur->val); cur = cur->next; if (cur != NULL) printf(" "); } printf("\n"); freeList(head); return 0; } Node *newNode(int val) { Node *node = (Node *) malloc(sizeof(Node)); node->val = val; node->next = NULL; return node; } void freeList(Node *head) { Node *old; while (head != NULL) { old = head; head = head->next; free(old); } } Node *removeLastK(Node *head, int k) { Node *fast = head; Node *slow = head; Node *pre = NULL, *old; for (int i = 0; i < k; i++) { fast = fast->next; } while (fast != NULL) { pre = slow; slow = slow->next; fast = fast->next; } if (pre == NULL) { old = head; head = head->next; } else { old = pre->next; pre->next = pre->next->next; } free(old); return head; }