单链表的建立,反序,插入,删除

#include <stdio.h>
#include <malloc.h>
typedef struct _node
{
int data;
struct _node *next;
}Node,*pNode;
pNode headnode = NULL;
void creatnode()
{
pNode current,head;
int temp = 0;
if(headnode == NULL)
{
headnode = (pNode)malloc(sizeof(Node));
printf("sizeof(_node)=%d\n",sizeof(Node));
}
else
{
printf("create bad\n");
return;
}
if(headnode == NULL)
{
printf("malloc error\n");
return;
}
else
{
headnode->data = 0;
}
head = headnode;
head->next = NULL;
for(temp = 0;temp < 4;temp ++)
{
current = (pNode)malloc(sizeof(Node));
if(!current)
{
printf("current malloc error\n");
return;
}
current->data = temp;
current->next = NULL;
head->next = current;
headnode->data ++;
head = current;
}


}
void printNode(pNode pnode)
{
pNode tempnode;
tempnode = pnode;
while(tempnode)
{
printf("node->data=%d\n",tempnode->data);
//printf("node addr=%x,next addr=%x\n",(unsigned int)tempnode,(unsigned int)tempnode->next);
tempnode = tempnode->next;
}
}
void invertNode(pNode pnode)
{
pNode prenode = NULL;
pNode current;
pNode pnext;
current = pnode;
while(current)
{
pnext=current->next;
if(pnext == NULL)
headnode = current;
current->next = prenode;
prenode = current;
current = pnext;
}
}
void appendToEnd(pNode pnode)
{
pNode tempnode = headnode;
while(tempnode)
{
tempnode = tempnode->next;
if(tempnode->next == NULL)
{
tempnode->next = pnode;
break;
}
}
}
void deleteNode(int data)
{
pNode tempnode = headnode;
pNode pnext = NULL;
if(tempnode->data == data)
{
headnode = headnode->next;
free(tempnode);
return;
}
while(tempnode)
{
pnext = tempnode->next;
if(pnext->data == data)
{
tempnode->next = pnext->next;
free(pnext);
break;
}
tempnode = pnext;
}
}
void main()
{
//pNode addnode = (pNode)malloc(sizeof(Node));
//addnode->next = NULL;
//addnode->data = 20;
creatnode();
printNode(headnode);
//invertNode(headnode);
//printNode(headnode);
//appendToEnd(addnode);
deleteNode(2);
printNode(headnode);
deleteNode(4);
printNode(headnode);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值