纯手打,用于期末复习,未检查是否正确,仅供参考。
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int i;
struct node* next;
}Node;
Node *Creat(void)//头插法
{
Node*p=NULL,*head=NULL;
int num;
scanf("%d",&num);
while(num!=0)
{
p=(Node*)malloc(sizeof(Node));
p->i=num;
p->next=head;
head=p;
scanf("%d",&num);
}
return head;
}
Node *Creat2(void)//尾插法
{
Node*head=NULL,*rear=NULL,*p=NULL;
int num;
scanf("%d",&num);
while(num!=0)
{
p=(Node*)malloc(sizeof(Node));
p->i=num;
p->next;
if(head==NULL)
{
head=p;
}
else
{
rear->next=p;
}
rear=p;
scanf("%d",&num);
}
return head;
}
Node *CreatOrder(void)//有序链表 从小到大
{
Node *head=NULL,*pre=NULL,*cur=NULL;
int num;
scanf("%d",&num);
while(num!=0)
{
if(head==NULL)
{
cur=(Node*)malloc(sizeof(Node));
cur->i=num;
}
else if(head->i>=num)
{
cur=(Node*)malloc(sizeof(Node));
cur->next=head;
head=cur;
}
else
{
pre=head;
cur=pre->next;
while(cur->i<num&&cur!=NULL)
{
pre=pre->next;
cur=cur->next;
}
pre->next=(Node*)malloc(sizeof(Node));
pre->next->next=cur;
}
}
return head;
}
Node *DeleteNode(Node*head,int num)//删除特定值的结点
{
Node *pre=NULL,*cur=NULL;
if(head==NULL)
{
printf("空链表,删除失败!");
}
else if(num==head->i)
{
pre=head;
head=head->next;
free(pre);
}
else
{
pre=cur=head;
while(cur&&num!=cur->i)
{
pre=cur;
cur=cur->next;
}
if(cur)
{
pre->next=cur->next;
free(cur);
}
else
{
printf("没有找到结点,删除失败!");
}
}
return head;
}