具體代碼如下:所實現的是一個帶頭結點的鏈表
/*
單鏈表的插入分爲三種方法,在頭結點插入,在中間插入,在末尾插入
*/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node //創建一個結點,用來存儲信息
{
int data;
struct node*next;
}node;
node*creat() //單鏈表的建立
{
node*head,*p,*q;
char ch;
head=(node*)malloc(sizeof(node));
q=head;
ch='*';
puts("單鏈表尾插法,?結束"); //用?來作爲結束標誌
while(ch!='?')
{
int a;
scanf("%d",&a);
p=(node*)malloc(sizeof(node));
p->data=a;
q->next=p;
q=p;
ch=getchar();
}
q->next=NULL;
return(head);
}
void print(node*a) //單鏈表的打印
{
puts("print ");
a=a->next;
while(a!=NULL)
{
printf("%d ",a->data);
a=a->next;
}
}
int length_node(node *head) //單鏈表的測長
{
int len=0;
node *p=head->next;
if(p!=NULL)
{
len++;
p=p->next;
}
return len;
}
node* insert_node(node*head,int data,int pos) //單鏈表的插入,參數爲頭結點,插入的數字大小,插入的位置
{
node* p; //創建一個要插入的節點
int len=length_node(head); //判斷鏈表的長度
p=(node *)malloc(sizeof(node));
if(p==NULL)
{
printf("申請空間失敗");
exit(0);
}
p->data=data;
if(pos>len || pos<0)
{
printf("插入位置不合理\n");
exit(0);
}
if(pos==0) //插在head後面,即在表頭位置
{
p->next=head->next;
head->next=p;
return head;
}
else if(pos>0)
{
int i=1;
node *q=head->next;
for(i=1;i<pos;i++)
{
q=q->next;
}
if(q->next==NULL) //插入鏈表末尾
{
q->next=p;
p->next==NULL;
}
else if(q->next!=NULL)
{
p->next=q->next; //插入鏈表中間位置
q->next=p;
}
}
}
int main()
{
node*a;
a=creat();
print(a);
insert_node(a,9,10);
puts("\nhaved insert:");
print(a);
printf("\n");
return 0;
}