typedef struct node {
int value;
struct node* next;
} Node,pNode;
Node *g_head = NULL;
void InsertHead() //头插法创建节点,不带头结点
{
Node *p = (Node*)malloc(sizeof(Node));
if (!p) {
puts("创建节点失败!");
exit(1);
}
int iValue;
printf("请输入一个数值:");
scanf("%d", &iValue);
p->value = iValue;
p->next = NULL;
printf("请输入一个数值:");
while(scanf("%d",&iValue)!=EOF)
{
Node *pTemp = (Node*)malloc(sizeof(Node));
if (!p) {
puts("创建节点失败!");
exit(1);
}
pTemp->next = p;
pTemp->value = iValue;
p = pTemp;
}
g_head = p;
return;
}
void DeleteNode(Node *head,int key) //按值查找删除节点
{
Node *pTemp;
Node *pDelete;
pTemp = pDelete = head;
int i=1;
while (1)
{
if (pDelete && pDelete->value!=key)
{
pTemp = pDelete;
pDelete = pDelete->next;
i++;
continue;
}
if (pDelete==NULL)
{
puts("不存在该值!");
return;
}
else
{
if (i==1)
g_head = pDelete->next;
pTemp->next = pDelete->next;
free(pDelete);
pDelete = NULL;
return;
}
}
}
void InvertNode(Node *p) //反转单链表
{
assert(p);
Node *pFront = (Node *)malloc(sizeof(Node)); //做为头结点使用
pFront->next = NULL;
Node *pTemp = p->next;
while (p)
{
p->next = pFront->next;
pFront->next = p;
p = pTemp;
if (!p) break;
pTemp = pTemp->next;
}
g_head = pFront->next;
free(pFront);
pFront = NULL;
}
void printNode(Node *p) //打印链表节点
{
while (p)
{
printf("%d ",p->value);
p = p->next;
}
}
void main()
{
InsertHead();
printNode(g_head);
printf("\n");
//输入 10,20,30,40,50
// DeleteNode(g_head, 10);
// DeleteNode(g_head, 50);
// DeleteNode(g_head, 30);
// DeleteNode(g_head, 100);
printNode(g_head);
}