#include<stdio.h>
#include<stdlib.h>
struct list //创建链表
{
int data; //数据域
struct list* next; //指针域
};
struct list* createlist() { //链表的创建
struct list* head = NULL, * p, * tail = NULL;
int n;
printf("输入值,以@结束");
while (scanf_s("%d", &n) == 1) { //输入数据,当输入的数据不为数字结束循环
p = (struct list*)malloc(sizeof(struct list));
if (head == NULL)
head = p;
else
tail->next = p;
p->data = n;//赋值
p->next = NULL;
tail = p;
}
return head;
}
void display(struct list* head) {//链表的遍历
struct list* p;
p = head;
while (p != NULL) {
printf("%d-->", p->data);
p = p->next;
}
printf("NULL");
printf("\n");
}
struct list* delete (struct list* head,int x) {//删除结点,x为数据的值
if (head == NULL) {
printf("链表为空");
return NULL;
}
struct list* p, * q;//定义结点p,q
p = head;
q = p->next;
while (q != NULL) {
if (q->data == x) {
p->next = q->next;
free(q);//释放结点
q = p->next;
}
else {
p = p->next;
q = q->next;
}
}
if (head != NULL && head->data == x) {//如果删除是头结点的数据
q = head;
head = q->next;//把头节点指向下一个
free(q);//释放结点
return head;
}
return head;
}
int main() {
printf("请输入要删除的数据");
int n;
scanf_s("%d", &n);//输入要删除的data值
struct list* head;//定义头节点
head = createlist();//创建链表
display(head);//遍历链表
head = delete(head, n);//删除data值为n的结点
display(head);//遍历删除后的结点
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交