#include <stdio.h>
#include <stdlib.h>
//单链表头插
//定义节点类型
typedef struct LNode {
int data;//数据域
struct LNode *next;//指针域
} LNode, *LinkList;
void headList(LinkList &l) {//LinkList等价LNode*(结构体指针)
l = (LinkList) malloc(sizeof(LNode));
l->next = NULL;
int x;
scanf("%d", &x);
LinkList s;
while (x != 9999) {
s = (LinkList) malloc(sizeof(LNode));
s->data = x;
//最后两步顺序不能换
s->next = l->next;
l->next = s;
scanf("%d", &x);
}
}
void tailList(LinkList &l) {
l = (LinkList) malloc(sizeof(LNode));
l->next = NULL;
int x;
scanf("%d", &x);//s指向新节点,r指向链表尾
LinkList s, r = l;
while (x != 9999) {
s = (LinkList) malloc(sizeof(LNode));//s存储了这个节点的起始地址.s指向此节点
s->data = x;
r->next = s;//新节点给尾节点next指针
r = s;//r指向新的尾部
scanf("%d", &x);
}
r->next = NULL;
}
//void printList(LinkList l) {
// l = l->next;
// while (l != NULL) {
// printf("%3d", l->data);
// l = l->next;
// }
//}
void printList(LinkList L) {
L = L->next;
while (L != NULL) {
printf("%d", L->data);//打印当前结点数据
L = L->next;//指向下一个结点
if (L != NULL) {
printf(" ");
}
}
printf("\n");
}
LinkList getByLoxation(LinkList l, int pos) {
int i = 1;
l = l->next;
while (l && i < pos) {
l = l->next;
i++;
}
return l;
}
bool listDelete(LinkList l, int i) {
LinkList p;
LinkList q;
if (i < 1) {
return false;
} else {
p = getByLoxation(l, i - 1);
q = p->next;//存被删除节点的指针,方便后续free
if (q == NULL) {
return false;
}
p->next = q->next;
free(q);
return true;
}
};
int main() {
LinkList l;
// headList(l);
// printList(l);
tailList(l);
bool res = listDelete(l, 4);
if (res) {
printList(l);
}else {
printf("false");
}
return 0;
}