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;
}
推荐阅读
- android UI(底部菜单栏的学习与制作——Fragment碎片一)
- Android实战——RxJava2+Retrofit+RxBinding解锁各种新姿势
- C语言程序设计——从入门到进阶,C语言程序设计——从入门到进阶-巨同升主编.pdf(3)...
- c语言字|c语言字 字符串转换成数组_编程C语言进阶篇——构造类型(数组)
- c语言进阶——多维数组本质及指针数组的应用分析
- C语言进阶|【C语言进阶7——数组和指针的练习(1) - 学习sizeof 和 strlen,看完这一篇就够了】
- 笔记|C语言进阶——3.二维指针
- c|指针进阶——字符指针、指针数组和数组指针如何辨别和判断
- C语言进阶|【C语言进阶6——指针的进阶(3)-总结数组和指针】
- Android 开发第一项目——计算器的开发记录