#include <stdio.h>
#include <stdlib.h>
struct node
{
int num;
struct node * next;
};
/*----------将新节点插入链表头-----------------------*/
void insert_head(struct node ** head, struct node * new_node)
{
new_node->next = *head;
*head = new_node;
}
/*----------将新节点插入链表尾-------------------------*/
void insert_tail(struct node ** head, struct node * new_node)
{
struct node * p;
p = *head;
if(*head == NULL)
{
*head = new_node;
new_node = NULL;
}
else
{
while(p->next != NULL) /*寻找尾节点*/
{
p = p->next;
}
p->next = new_node;
new_node->next = NULL;
}
}
/*----------删除指定节点----------------------------*/
void delect(struct node ** head, int num)
{
struct node * p = NULL;
struct node * q = NULL;
p = q = *head;
if(NULL == *head)
{
printf("Empty!\n");
}
else if((*head)->num == num)
{
*head = (*head)->next;
free(p);
}
else
{
while(p != NULL && p->num != num)
{
q = p;
p = p->next;
}
if(p != NULL)
{
q->next = p->next;
free(p);
}
else
{
printf("No such node\n");
}
}
}
/*-----------升序插入新节点---------------------*/
void insert(struct node ** head, int num)
{
struct node * new_node = (struct node *)malloc(sizeof(struct node));
new_node->num = num;
new_node->next = NULL;
struct node * p = NULL;
struct node * q = NULL;
p = q = *head;
if(*head == NULL)
{
new_node->next = *head;
*head = new_node;
}
else if((*head)->num >= num)
{
new_node->next = *head;
*head = new_node;
}
else
{
while(p != NULL && p->num < num)
{
q = p;
p = p->next;
}
if(p != NULL)
{
new_node->next = p;
q->next = new_node;
}
else if(p == NULL)
{
q->next = new_node;
new_node = NULL;
}
}
}
/*---------遍历链表并输出-------------------------*/
void display(struct node * head)
{
struct node * p;
p = head;
if(NULL == p)
{
printf("Empty!");
}
while(p != NULL)
{
printf("%3d", p->num);
p = p->next;
}
printf("\n");
}
/*---------释放链表-----------------------------*/
void clear(struct node ** head)
{
struct node * p;
p = *head;
while(*head != NULL)
{
p = *head;
*head = (*head)->next;
free(p);
}
}
/*--------------------------------------*/
int main()
{
struct node * head;
head = NULL;
struct node * new_node;
int i;
int num;
for(i = 1; i <= 10; i++)
{
new_node = (struct node *)malloc(sizeof(struct node));
new_node->num = i;
// insert_head(&head, new_node);
insert_tail(&head, new_node);
}
display(head);
printf("input num to be Delect:\t");
scanf("%d", &num);
delect(&head, num);
display(head);
printf("input num to be Insert:\t");
scanf("%d", &num);
insert(&head, num);
printf("input num to be Insert:\t");
scanf("%d", &num);
insert(&head, num);
display(head);
clear(&head);
display(head);
return 0;
}
链表建立、插入及删除
最新推荐文章于 2020-11-29 01:21:48 发布