头文件
#define _CRT_SECURE_NO_WARNINGS #include头结点 链表的定义#include
typedef struct LNode
{ int data;
struct LNode* next;
}*LinkList ,LNode;
头插法建立单链表
//头插法建立单链表
void CreateLink1(LinkList& L)
{
//带头结点的单链表
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
LNode* m;
int x;
scanf("%d", &x);
while (x != 999)
{
m = (LNode*)malloc(sizeof(LNode));
m->data = x;
//s->next 整体是访问结构体空间的一个成员
m->next = L->next;
L->next = m;
scanf("%d", &x);
}
}
尾插法建立单链表
//尾插法创建单链表
void CreateLink2(LinkList& L)
{
L =(LinkList)malloc(sizeof(LNode));
//L->next = NULL;
LNode* s,*r=L;
int x;
scanf("%d", &x);
while (x != 999)
{
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r= s;//r指向新的表尾节点
scanf("%d", &x);
}
r->next = NULL;
}
插入节点操作
//插入节点操作
void insertLink(LinkList& L, int n,int e)
{
LNode* s;
LNode* p=searchNode1(L, 2);
s = (LNode*)malloc(sizeof(LNode));
s->data = e;
//p->next访问的是结构体空间的一个成员
s->next = p->next;
p->next = s;
}
打印链表[print()]
void printLink1(LinkList L)
{
L = L->next;
while (L)
{
printf("%d ",L->data);
L = L->next;
}
}
按序号查找节点的值[searchNode1()]
//按序号查找节点的值
LNode* searchNode1(LinkList L, int i)
{
int j = 1;
LNode* p = L->next;
if (i == 0)
{
return L;
}
if (i < 1)
{
return NULL;//若i无效,则返回NULL
}
if (p && j < i)
{
p = p->next;
j++;
}
return p;//返回第i个节点的指针,若i大于表长,则返回NULL
}
按值查找节点的操作[searchNode2()]
//按值查找节点的操作
LNode* searchNode2(LinkList L, int e)
{
LNode* p = L->next;
int i = 1;
while (p != NULL && p->data!=e)
{
p = p->next;
i++;
}
printf("按值查找的序号为:%dn", i);
return p;
}
删除节点
主函数
int main()
{
//LinkList L1;
//头插法创建单链表
//CreateLink1(L1);
//printLink1(L1);
LinkList L2;
//尾插法创建单链表
CreateLink2(L2);
printLink1(L2);
LNode* m;
//按序号查找节点的值
m = searchNode1(L2, 2);
printf("节点的值为:%d", m->data);
//按值查找表节点
LNode* n;
n = searchNode2(L2, 54);
//擦汗如节点操作
//操作链表,插入位置,插入值。插入2之后
insertLink(L2,2,32);
printLink1(L2);
return 0;
}
输出结果为:



