PIPIOJ—1267: 删除单链表的倒数第K个节点

题目描述 给定一个长度为n的单链表,删除倒数第K的节点,然后从头到尾输出每个节点的值。
输入 第一行包含两个整数N,k,k<=N.
第二行包含N个整数,代表从表头到表尾每个节点的值。
你需要建立单链表把这N个数串起来~
输出 按顺序输出删除了倒数第K个节点后每个节点的值。
样例输入 5 2
1 2 3 4 5
样例输出 【PIPIOJ—1267: 删除单链表的倒数第K个节点】1 2 3 5
C++参考解答

#define _CRT_SECURE_NO_WARNINGS #include #include 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 = https://www.it610.com/article/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) { returnL; } 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; }

    推荐阅读