#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define error -1
typedef struct node
{
char data[10];
struct node *next;
}node,*LinkList;
node *ListCreate(int n)//建立单链表,该单链表有头结点
{
//node *p,*h,*s;
LinkList p,h,s;
h = (LinkList)malloc(sizeof(node));
h->next = NULL;
p = h;
for(int i=0;i<n;i++)
{
s = (LinkList)malloc(sizeof(node));
scanf("%s",s->data);
//s->data = "lv";
p->next = s;
s->next = NULL;
p = s;
}
return h;
}
int DispList(LinkList h)//输出单链表
{
LinkList p = h->next;
while(p != NULL)
{
printf("\n%s ",p->data);
p = p->next;
}
getchar();
return 1;
}
int length(LinkList &h)//单链表的测长,h前为什么加不加&都可以,可能是引用的问题????
{
int n=0;
LinkList p = h;
while(p->next!=NULL)
{
p = p->next;
n++;
}
return n;
}
int ListDelete(LinkList &h,int i)//删除单链表中的某个结点
{
LinkList p = h,q;
int j=0;
while(p->next!=NULL && j<i-1 )
{
p = p->next;
j++;
}
if((p->next)==NULL || j>i-1) return error;
q = p->next;
p->next = q->next;
free(q);
return 1;
}
int ListInsert(LinkList &h,int i)//在带头结点的单链表L中第i个位置之前插入元素
{
LinkList p=h,s,q;
int j=0;
while(p && j<i-1)
{
p = p->next;
j++;
}
if(!p || j>i-1) return error;//i小于1或大于表长加1
s = (LinkList)malloc(sizeof(node));
printf("\n插入的元素");
scanf("%s",s->data);
s->next = p->next;
p->next = s;
return 1;
}
int main()
{
int num=4;
int len;
//node *head;
LinkList head;
head = ListCreate(num);//建立单链表
printf("\n建立的单链表:");
DispList(head);//单链表打印
len = length(head);//单链表测长
printf("\n单链表的长度:");
printf("\n%d",len);
ListDelete(head,2);
printf("\n删除某一结点后的单链表:");
DispList(head);
ListInsert(head,4);
printf("\n插入某一结点后的单链表:");
DispList(head);
getchar();
return 0;
}#include<stdio.h>
#include<malloc.h>
#include<s