C语言链表基本操作
来源:互联网 发布:java lucene 内容搜索 编辑:程序博客网 时间:2024/05/20 09:08
//链表节点定义
struct LinkNode {int val;
struct LinkNode *next;
};
//创建长度为listLen的链表,每个节点的值为0~listLen-1
LinkNode * createLink(int listLen){
struct LinkNode *phead,*ptail;phead=ptail=(struct LinkNode *)malloc(sizeof(LinkNode));
phead->next=NULL;
for(int i=0;i<listLen;i++){
struct LinkNode *nn = (struct LinkNode *)malloc(sizeof(LinkNode));
nn->val = i;
nn->next = NULL;
ptail->next=nn;
ptail=nn;
}
return phead->next;
}
//链表中值为val的节点后插入一个新的节点
LinkNode * insertNode(LinkNode *ph, int val){if(ph==NULL || ph->next==NULL)
return NULL;
LinkNode *ln=ph->next;
while(ln!=NULL && ln->val!=val){
ln = ln->next;
}
if(ln!=NULL){
LinkNode *nn = (LinkNode *)malloc(sizeof(LinkNode));
nn->val=val;
nn->next=ln->next;
ln->next=nn;
}
return ph;
}
//删除链表中值为val的节点
//delete a nodeLinkNode * delNode(LinkNode *ph, int val){
if(ph==NULL || ph->next==NULL)
return NULL;
LinkNode *ln=ph->next;
LinkNode *lp=ph;
while(ln!=NULL && ln->val!=val){
lp = ln;
ln = ln->next;
}
if(ln!=NULL){
LinkNode *tp = lp->next;
lp->next=lp->next->next;
free(tp);
}
return ph;
}
//正序打印链表
void printLinkList(LinkNode *ph){while(ph!=NULL){
printf(" %d addr=%p\n ", ph->val, ph->next);
ph=ph->next;
}
}
//逆序打印链表
void printLinkListReverse(LinkNode *ph){if(ph !=NULL ){
if(ph->next != NULL){
printLinkListReverse(ph->next);
}
printf("%d\n",ph->val);
}
}
阅读全文
0 0
- C语言链表基本操作
- C语言链表的基本操作
- C语言链表常见基本操作
- C语言链表的基本操作
- C语言实现链表基本操作
- c语言链表基本操作
- 链表的基本操作[C语言]
- C语言链表基本操作
- 双向链表的基本操作(C语言)
- C语言实现双向链表的基本操作
- C语言实现双向链表的基本操作
- 最基本的单向链表操作 C语言
- 双向循环链表基本操作(C语言)
- C语言--链表基本操作(课时5)
- c语言实现静态链表的基本操作
- c语言实现循环链表的基本操作
- c语言实现双向链表的基本操作
- 单向链表基本操作(C语言实现)
- 团体天梯赛L1-030. 一帮一
- 前端笔试的几道题
- angular使用Http和HttpClient设置查询参数的区别
- springmvc+websocket 框架搭建
- iGH EtherCAT初始化流程分析(一)
- C语言链表基本操作
- 跟老齐学Python之print详解
- windows系统下基于anaconda的方式安装tensorflow+theano+keras
- 一个默默奋斗的编程小白立下的flag
- vim笔记-diff
- AI时代,企业如何利用机器学习技术驱动业务发展?
- 腾讯「AI In All」的背后,是开放AI技术能力,探索腾讯应用场景
- malloc动态分配数组以及指针数组大小
- 腾讯AI战略详解:技术社会与创新图景 | 2017互联网科技创新白皮书重磅首发