#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}node;
尾插法创建链表
node *creat1(int n)//尾插法创建链表
{
node *p,*head,*r;//r是指向之前节点的指针,p是当前节点的指针,head是头指针
head=(node *)malloc(sizeof(node));
scanf("%d",&head->data);
r=head;
int i;
for(i=0;i<n-1;i++){
p=(node *)malloc(sizeof(node));
scanf("%d",&p->data);
r->next=p;
p->next=NULL;
r=p;
}
return head;
}
头插法创建链表
node *creat0(int n)//头插法创建链表
{
node *p,*head,*r;//r是指向之前节点的指针,p是当前节点的指针,head是头指针
p=(node *)malloc(sizeof(node));
scanf("%d",&p->data);
p->next=NULL;
r=p;
head=p;
int i;
for(i=0;i<n-1;i++){
p=(node *)malloc(sizeof(node));
scanf("%d",&p->data);
p->next=r;
head=p;
r=p;
}
return head;
}
打印链表
void node_printf(node *head)//打印链表
{
node *p=head;
while(p!=NULL){
printf("%d\n",p->data);
p=p->next;
}
}
删除节点
node *node_delect(node *head,int data)//删除节点
{
node *p=head,*pre;
while(p&&p->data!=data){
pre=p;
p=p->next;
}
if(p!=NULL)
pre->next=p->next;
return p;
}
void node_delect(node *head)//删除节点版本2
{
node *p=head,*pre;
int t;
printf("删除的ID=");
scanf("%d",&t);
while(p&&p->data!=t){
pre=p;
p=p->next;
}
if(p!=NULL)
pre->next=p->next;
if(p)
node_printf(head);
else
printf("NONE data\n");
}
按升序创建链表,Head是虚头节点
void creat(node *Head)//按升序创建链表,Head是虚头节点
{
node *p,*pTemp,*pre;
int t=1;
pTemp=(node *)malloc(sizeof(node));
cd_creat(pTemp);
pre=Head;
p=Head->next;
while(p!=NULL){
if(pTemp->id<p->id){
pre->next=pTemp;
pTemp->next=p;
t=0;
}
pre=p;
p=p->next;
}
if(t){
pre->next=pTemp;
pTemp->next=p;
}
}
检索链表,并返回节点指针
node *node_find(node *head,int data)//检索链表,并返回节点指针
{
node *p=head;
while(p->data!=data){
p=p->next;
}
return p;
}