链表——新建链表
时间:2022-07-24
本文章向大家介绍链表——新建链表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
int data;
struct node *pNext;
};
//新建node
struct node * create_node(int data)
{
struct node *p = (struct node *) malloc (sizeof(struct node));
if(NULL == p)
{
printf("malloc error!.n");
return NULL;
}
memset(p, 0, sizeof(struct node));
p->data = data;
p->pNext = NULL;
return p;
}
void insert_tail(struct node *pH, struct node *newp)
{
struct node * p = pH;
while(NULL != p->pNext)
{
p = p->pNext;
}
p->pNext = newp;
}
void insert_head(struct node * pH, struct node *newp)
{
newp->pNext = pH->pNext;
pH->pNext = newp;
}
//excluding header data
void list_for_each_1(struct node *pH)
{
struct node *p = pH->pNext;
printf("------------begin------------n");
while(NULL != p->pNext)
{
printf("node data : %d.n", p->data);
p = p->pNext;
}
printf("node data : %d.n", p->data);
printf("------------end------------n");
}
//excluding header data version 2 simplify
void list_for_each_3(struct node *pH)
{
struct node *p = pH;
printf("------------begin------------n");
while(NULL != p->pNext)
{
p = p->pNext;
printf("node data : %d.n", p->data);
}
printf("------------end------------n");
}
//including header data
int list_for_each_2(struct node *pH)
{
struct node *p = pH;
printf("------------begin------------n");
if(NULL == p)
{
printf("nothing.n");
return -1;
}
while(NULL != p->pNext)
{
printf("node data : %d.n", p->data);
p = p->pNext;
}
printf("node data : %d.n", p->data);
printf("------------end------------n");
return 0;
}
//can not delete header node data
int delete_node(struct node * pH, int data)
{
struct node *p = pH;
struct node *pPrev = NULL;
while(NULL != p->pNext)
{
pPrev = p;
p = p->pNext;
if(p->data == data)
{
if(NULL == p->pNext)
{
pPrev->pNext = NULL;
free(p);
}
else
{
pPrev->pNext = p->pNext;
free(p);
}
return 0;
}
}
printf("no node deleted.n");
return -1;
}
//can delete all node including the tail node and header node
struct node * delete_node_2(struct node * pH, int data)
{
struct node *p = pH;
struct node *pPrev = NULL;
pPrev = p;
while(NULL != p) //traserval to tail
{
if(p->data == data)
{
//delete header node
if(p->data == pH->data)
{
pH = p->pNext;
free(p);
printf("node %d deleted ok.n",data);
return pH; //delete ok!
}
else
{
//delete tail node
if(NULL == p->pNext)
{
pPrev->pNext = NULL;
free(p);
}
else
{
pPrev->pNext = p->pNext;
free(p);
}
printf("node %d deleted ok.n",data);
return pH;
}
printf("node %d deleted ok.n",data);
}
pPrev = p;
p = p->pNext;
}
return pH;
}
int main()
{
struct node * pHeader = create_node(1);
printf("Hello world!n");
insert_tail(pHeader, create_node(2));
insert_tail(pHeader, create_node(3));
insert_head(pHeader, create_node(4));
insert_head(pHeader, create_node(5));
list_for_each_2(pHeader);
pHeader = delete_node_2(pHeader, 3);
pHeader = delete_node_2(pHeader, 2);
pHeader = delete_node_2(pHeader, 5);
pHeader = delete_node_2(pHeader, 4);
pHeader = delete_node_2(pHeader, 1);
list_for_each_2(pHeader);
// printf("1 = %dn",pHeader->data);
// printf("2 = %dn",pHeader->pNext->data);
// printf("3 = %dn",pHeader->pNext->pNext->data);
// printf("4 = %dn",pHeader->pNext->pNext->pNext->data);
// printf("5 = %dn",pHeader->pNext->pNext->pNext->pNext->data);
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 等保测评2.0:应用身份鉴别
- 文件操作——读取
- YAML,另一种标记语言?不止是标记语言!
- Canal binlog 日志管理器与GTID简介
- RNA-Seq的Counts和FPKM数据如何转换成TPM?
- Java代码审计基础之反射
- 手把手教你用Python开发“剪刀石头布”小游戏【附源码】
- For语句
- 使用go语言制作dll封装Sprintf函数给VBA使用
- 同事埋了个坑:Insert into select语句把生产服务器炸了
- VBA使用API_01:读取文件
- 从0到1,撸一个IDEA插件,So Easy!
- VBA调用外部对象02:FileSystemObject
- VCS与Verdi的联合仿真
- ADC数据接入到AXI-Steam Interface