#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
//定义链表结构体
typedef struct link
{
struct link *next;
int data;
}ulink, *tlink;
//初始化链表
tlink init_link()
{
tlink head = malloc(sizeof(ulink));
if(head != NULL)
{
head->next = NULL;
}
return head;
}
//新建节点
tlink new_node(int num)
{
tlink new = malloc(sizeof(ulink));
if(new != NULL)
{
new->next = NULL;
new->data = num;
}
return new;
}
//头插法
bool insert_link(tlink head, tlink new)
{
new->next = head->next;
head->next = new;
return true;
}
//判断空
bool if_null(tlink head)
{
return head->next == NULL;
}
//找到节点
/*tlink find_node(tlink head, int num)
{
if(if_null(head))
return NULL;
tlink delete = head->next;
while(delete != NULL)
{
if(delete->data == num)
{
break;
}
delete = delete->next;
}
return delete;
}*/
//删除目标节点
bool delete_link(tlink head, int num)
{
tlink p = head;
tlink delete;
if(if_null(head))
return false;
while(p->next != NULL)
{
delete = p->next;
if(delete->data == num)
{
p->next = delete->next;
delete->next = NULL;
continue;
}
p = p->next;
}
return true;
}
//循环显示链表
void show_link(tlink head)
{
tlink p = NULL;
if(if_null(head))
return;
p = head->next;
while(p != NULL)
{
printf("%d \n", p->data);
p = p->next;
}
}
int main(int argc, char **argv)
{
int num;
//初始化链表
tlink head = NULL;
head = init_link();
while(1)
{
printf("正数加入,负数删除:");
scanf("%d", &num);
if(num > 0)
{
tlink new = new_node(num);
insert_link(head, new);
show_link(head);
}
else if(num < 0)
{
num = -num;
//tlink delete = find_node(head, num);
delete_link(head, num);
show_link(head);
}
else
{
break;
}
}
return 0;
}