动态创建链表
动态内存申请+模块化设计
1.创建链表
2.创建结点
3.插入结点
4.删除结点
5.打印遍历链表
链表的插入与删除
1.0插入
#include<stdio.h>
#include<stdlib.h>
struct Num
{
int num;
struct Num *next;
};
void inputNum(struct Num **head,int num)
{
struct Num *precious;
struct Num *current;
struct Num *ne;
precious=NULL;
current =*head;
while(current!=NULL&¤t->num< num)
{
precious=current;
current =current->next;
}
ne=(struct Num *)malloc(sizeof (struct Num));
if(ne==NULL)
{
printf("defect");
}
ne->num=num;
ne->next=current;
if(precious==NULL)
{
*head=ne;
}
else
{
precious->next=ne;
}
}
void printNum(struct Num*head)
{
struct Num *current;
current=head;
while(current!=NULL)
{
printf("%d ",current->num);
current=current->next;
}
putchar('\n');
}
int main()
{
struct Num *head=NULL;
int input;
printf("input number\n");
while(1)
{
scanf("%d",&input);
if(input==-1)
{
break;
}
inputNum(&head,input);
printNum(head);
}
}
2.0删除
下列代码只有删除函数和主函数部分
void deleteNode(struct Node ** head, int value)
{
struct Node* precious;
struct Node* current;
current =* head;
precious = NULL;
while (current != NULL && current->value != value)
{
precious = current;
current = current->next;
}
if (current == NULL)
{
printf("defect");
return;
}
else
{
if (precious == NULL)
{
*head = current->next;
}
else
{
precious->next = current->next;
}
}free(current);
}
int main(void)
{
struct Node* head = NULL;
int input;
while (1)
{
scanf("%d", &input);
if (input == -1)
{
break;
}
deleteNode(&head, input);
printNode(head);
}
}