1、增加(尾插)
void backnode(node** ppnode, int num, typedata data )//尾插
{
node *pnewnode = (node *)malloc(sizeof(node));
pnewnode->num = num;//赋值
pnewnode->data = data;
pnewnode->next = NULL;
if(*ppnode == NULL)
{
*ppnode = pnewnode;//存储地址
}
else
{
node *p = *ppnode;
while(p->next != NULL)
{
p = p->next;
}
p->next = pnewnode;
}
}
调用时
node *pnode = NULL;
backnode(&pnode,1,11);
另一种尾插
node* backnode(node *pnode, int num, typedata data )
{
node *pnewnode = (node *)malloc(sizeof(node));
pnewnode->num = num;//赋值
pnewnode->data = data;
pnewnode->next = NULL;
if(pnode == NULL)
{
pnode = pnewnode;//存储地址
}
else
{
node *p = pnode;
while(p->next != NULL)
{
p = p->next;
}
p->next = pnewnode;
}
return pnode;
}
调用时
node *pnode = NULL;
pnode = backnode2(pnode,1,11);
从以上两种尾插法可知,要改变指针,需要传递指针的地址,即用二级指针或是用返回值。
头插法
node *headnode(node *pnode, int num, typedata data)
{
node *pnewnode = (node *)malloc(sizeof(node));
pnewnode->num = num;//赋值
pnewnode->data = data;
pnewnode->next = NULL;
if(pnode == NULL)
{
pnode = pnewnode;
pnewnode = NULL;
}
else
{
pnewnode->next = pnode;
pnode = pnewnode;
}
return pnode;
}
2、查找
node *findfirst(node *pnode,int num)
{
for(node *p = pnode; p != NULL; p = p->next)
{
if(p->num == num)
{
return p;
break;
}
}
return NULL;
}
调用时
node *pnode = NULL;
pnode = headnode(pnode,1,11);
pnode = headnode(pnode,2,12);
pnode = headnode(pnode,3,13);
pnode = headnode(pnode,4,14);
node *find = findfirst(pnode,3);
if(find == NULL)
{
printf("\n没有找到\n");
}
else
{
printf("\n%d,%d,%p\n",find->num, find->data, find);
}
3、修改
int change(node *pnode, int oldnum, int newnum)//正常替换返回1,不正常替换返回0
{
for(node *p = pnode; p != NULL; p = p->next)
{
if(p->num == oldnum)
{
p->num = newnum;
return 1;
break;
}
}
return 0;
}
4、逆转
node *reverse(node *pnode)
{
node *p1, *p2, *p3;
p1 = p2 = p3 = NULL;//避免野指针
if(pnode == NULL || pnode->next == NULL)
{
return pnode;
}
else
{
p1 = pnode;
p2 = pnode->next;
while(p2 != NULL)
{
p3 = p2->next;
p2->next = p1;//地址转向
p1 = p2;
p2 = p3;
}
pnode->next = NULL;
pnode = p1;
return pnode;
}
}
5、删除节点
node *deletenode(node *pnode, int num)
{
node *p1, *p2;
p1 = p2 = NULL;
p1 = pnode;
while(p1 != NULL)
{
if(p1->num == num)
break;
else
{
p2 = p1;
p1 = p1->next;
}
}
if(p1 == pnode)
{
pnode = p1->next;
free(p1);
}
else
{
p2->next = p1->next;
free(p1);
}
return pnode;
}
6、插入节点
node *insert(node *pnode, int findnum, int newnum, typedata newdata)
{
node *p1, *p2;
p1 = p2 = NULL;
p1 = pnode;
while(p1 != NULL)
{
if(p1->num == findnum)
{
break;
}
else
{
p2 = p1;
p1 = p1->next;
}
}
node *pnewnode = (node *)malloc(sizeof(node));
pnewnode->num = newnum;
pnewnode->data = newdata;
if(p1 == pnode)
{
pnewnode->next = p1;
pnode = pnewnode;
}
else
{
pnewnode->next = p1;
p2->next = pnewnode;
}
return pnode;
}