单链表应用中,删除指定元素,并且打印链表元素内容
- 创建一个指针结构体
struct link {
char ch;
struct link *next;
};
- 创建用户输入元素内容算法(CreateByUser)
struct link *create() {
char ch;
struct link *next , *R , *L = NULL;
printf("printf char in this scope:\n");
while((ch = getchar()) != '\n') {
next = (struct link *)malloc(sizeof(struct link));
next -> ch = ch;
if(L == NULL) {
L = R = next; //头指针赋值初始值
} else {
R -> next = next; //移动指针赋值
R = next;
}
}
R -> next = NULL; //尾指针的最后一个元素赋空值
return L;
};
- 根据给出的链表,删除对应的结点的算法
struct link *Delete(struct link *L , char ch){
// p当前需要判断的结点
// r删除结点指针
// q前驱结点
struct link *q , *r , *p ;
p = q = L;
while(p != NULL){
//如果是值为x
if(p->ch == ch){
//如果是头结点
if(p == L){
r = p; //需要删除的结点
p = p->next;
q = p; //让两个指针都指向下一节点
}else{
r = q->next;
q->next = p->next;
p = p->next;
}
r->next = NULL;
free(r);
}else{ //如果当前结点不满足条件值,就向后移动
q = p;
p = p->next;
}
}
return L;
}
- 输出指定元素的位置索引
void search(struct link *L , char ch) {
struct link *h;
int index = 1 ;
bool flag = false;
h = L;
while(h!=NULL) {
if(h->ch == ch) {
printf("X的位置为:%d\n",index);
flag = true;
}
index++;
h = h->next;
}
if(!flag){
printf("不存在指定字符\n");
}
}
- 根据链表,输出链表值的算法
void DispLink(link *L){
struct link *H;
H = L;
while(H!=NULL){
printf("%3c",H->ch);
H = H->next;
}
}
- 展示结果如下:(不带x字符)
- 带x字符