/*
作者:Mr 菜
功能:单链表:
初始化,头插,删除,打印功能
Data:190716
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}NODE;
NODE* Initial()//链表初始化,头结点为空
{
NODE *p = (NODE*)malloc(sizeof(NODE));
p->next = NULL;
return p;
}
void Print(NODE* head)//打印链表
{
NODE* p = (NODE*)malloc(sizeof(NODE));
p = head->next; //从第一个不为空的节点开始打印
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
}
void Insert(NODE* head,NODE value)//头插
{
NODE* q = (NODE*)malloc(sizeof(NODE));
*q = value;
q->next = head->next; //先将后面的节点与要插入的节点连上
head->next = q; //再将头结点与插入的节点连上
}
void Delete(NODE* head,int value)//删除所有包含相同元素的节点
{
NODE* p = head->next;
NODE* q = head;
while (p != NULL)
{
NODE* a = NULL;
if (p->data == value)
{
a = p;
q->next = p->next;
p = q->next;
free(a);
continue;
}
else
{
p = p->next;
q = q->next;
}
}
}
int main(int argc, const char *argv[])
{
NODE* head;
NODE mynode;
head = Initial();
while(1)
{
scanf("%d", &mynode.data);
getchar();
if (mynode.data == 0)break;
Insert(head, mynode);
}
Delete(head, 2);
Print(head);
free(head);
getchar();
return 0;
}
C语言写的简单单链表
最新推荐文章于 2024-08-11 09:14:53 发布