c/c++ 链表实现
- //链表的基本用法代码实现
/************************************************************************/- /* Created: 2014-03-02
- /* Author: http://weibo.com/3088919800/profile
- /************************************************************************/
- #include "stdio.h"
- #include "stdlib.h"
- struct ListNode
- {
- int value;
- ListNode * next;
- };
- ListNode* CreateListNode(const int& nNodeValue)
- {
- ListNode* pNode;
- pNode = (ListNode*)malloc(sizeof(ListNode));
- if (!pNode)
- return NULL;
- pNode->value = nNodeValue;
- pNode->next = NULL;
- return pNode;
- }
- //we need the head node value.
- ListNode * CreateList(const int& nListHeadVal)
- {
- ListNode * li;
- li = CreateListNode(nListHeadVal);
- if (!li)
- return NULL;
- return li;
- }
- //free all nodes in the list
- void FreeList(ListNode *li)
- {
- ListNode * pListNode, *pTmpNode;
- pListNode = li;
- while (pListNode)
- {
- pTmpNode = pListNode;
- pListNode = pListNode->next;
- free(pTmpNode);
- }
- li = NULL;
- }
- ListNode* AppendNode(ListNode* pList, const int &nVal)
- {
- ListNode* node;
- ListNode* header;
- node = CreateListNode(nVal);
- if (!node)
- return pList;
- header = pList;
- if (!header)
- return node;
- header = pList;
- while(header->next)
- header = header->next;
- header->next = node;
- return pList;
- }
- //if find return the node, else return null
- ListNode* Find(ListNode* pList, const int& nVal)
- {
- ListNode* pListNode = NULL;
- pListNode = pList;
- while (pListNode)
- {
- if (pListNode->value == nVal)
- break;
- pListNode = pListNode->next;
- }
- return pListNode;
- }
- //insert decreasing 增减
- ListNode* Insert(ListNode* pList, const int& nVal)
- {
- ListNode * pNewNode = NULL;
- ListNode* pIterNode = NULL;
- pNewNode = CreateListNode(nVal);
- if (!pNewNode)
- return pList;
- if (!pList)
- return pNewNode;
- pIterNode = pList;
- while (pIterNode->value > nVal && pIterNode->next && pIterNode->next->value > nVal)
- pIterNode = pIterNode->next;
- //if true ,it is the first node
- if (pIterNode->value <= nVal)
- {
- pNewNode->next = pIterNode;
- return pNewNode;
- }
- if (pIterNode->next)
- pNewNode->next = pIterNode->next;
- pIterNode->next = pNewNode;
- return pList;
- }
- //insert Ascending,递增
- ListNode* Insert2(ListNode* pList, const int& nVal)
- {
- ListNode * pNewNode = NULL;
- ListNode* pIterNode = NULL;
- pNewNode = CreateListNode(nVal);
- if (!pNewNode)
- return pList;
- if (!pList)
- return pNewNode;
- pIterNode = pList;
- while (pIterNode->value < nVal && pIterNode->next && pIterNode->next->value < nVal)
- pIterNode= pIterNode->next;
- //if true ,it is the first node
- if (pIterNode->value > nVal)
- {
- pNewNode->next = pIterNode;
- return pNewNode;
- }
- // insert the node.
- if (pIterNode->next)
- pNewNode->next = pIterNode->next;
- pIterNode->next = pNewNode;
- return pList;
- }
- void PrintList(ListNode* list)
- {
- ListNode* pIterNode;
- pIterNode = list;
- while (pIterNode)
- {
- printf("%d ", pIterNode->value);
- pIterNode = pIterNode->next;
- }
- }
- //链表倒置
- ListNode* InvertList(ListNode* list)
- {
- ListNode *pIterNode, *pNewHead, *pTmpNode;
- pTmpNode = list;
- if (!pTmpNode || !(pTmpNode->next))
- return list;
- pNewHead = list;
- pIterNode = list;
- while(pIterNode->next)
- {
- pTmpNode = pIterNode->next->next;
- pIterNode->next->next = pNewHead;
- pNewHead = pIterNode->next;
- pIterNode->next = pTmpNode;
- }
- return pNewHead;
- }
- int main(int argc, char* argv[])
- {
- ListNode* list = CreateList();
- ListNode* pNode;
- if (!list)
- {
- printf("create list error!");
- exit(-);
- }
- int i = ;
- for (int i = ; i< ; i++)
- {
- list = Insert2(list, i);
- }
- printf("\nAfter insert list: \n");
- PrintList(list);
- list = InvertList(list);
- printf("\nAfter invert the list\n");
- PrintList(list);
- //test find .
- pNode = Find(list, );
- if (pNode)
- {
- printf("\nfind it:%d\n", pNode->value);
- }
- else
- {
- printf("\nnot find it:%d\n", );
- }
- //free all the list node
- FreeList(list);
- getchar();
- return ;
- }
c/c++ 链表实现的更多相关文章
- Redis链表实现
链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元素都是比较长的字符串时, Redis 就会使用链表作为列表键的底层 ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- 排序算法----基数排序(RadixSort(L))单链表智能版本
转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...
- 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结
防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数 ...
- 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法
有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...
- C语言之链表list
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h& ...
- 单链表的C++实现(采用模板类)
采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作. 链表结构定义 定义单链表 ...
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- 用JavaScript来实现链表LinkedList
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址. 写在前面 好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了.但幸运 ...
- 数据结构:队列 链表,顺序表和循环顺序表实现(python版)
链表实现队列: 尾部 添加数据,效率为0(1) 头部 元素的删除和查看,效率也为0(1) 顺序表实现队列: 头部 添加数据,效率为0(n) 尾部 元素的删除和查看,效率也为0(1) 循环顺序表实现队列 ...
随机推荐
- Test测试方法
Junit 注解 解释 @Before 在每个测试方法运行前执行的方法 @After 在每个测试方法运行后执行的方法 @BeforeClass 在类中所有测试运行之前运行的方法 @AfterClass ...
- k8spod控制器概述
自主式pod对象由调度器绑定至目标工作节点后即由相应节点上的kubelet负责监控其容器的存活性,容器主进程崩溃后,kubelet能够自动重启相应的容器.不过,kubelet对非主进程崩溃类的容器错误 ...
- JAVA基础编程之打印99乘法表
需求:打印9*9乘法表 技术考核: 1.for嵌套循环 代码: // 打印99乘法表 public static void print99Table() { System.out.println(&q ...
- 【leetcode】1266. Minimum Time Visiting All Points
题目如下: On a plane there are n points with integer coordinates points[i] = [xi, yi]. Your task is to f ...
- Python CGI编程Ⅵ
GET和POST方法 浏览器客户端通过两种方法向服务器传递信息,这两种方法就是 GET 方法和 POST 方法. 使用GET方法传输数据 GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面 ...
- python from…import* 语句
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明: from modname import * 这提供了一个简单的方法来导入一个模块中的所有项目.然而这种声明不该被过多地使用. ...
- BZOJ 2434: [Noi2011]阿狸的打字机 AC自动机+fail树+线段树
Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...
- CF603E Pastoral Oddities 优先队列+结论+LCT维护生成树
首先,一个神奇的结论:一个合法的方案存在的条件是每一个联通块的节点数都是偶数个的. 这个可以用数学归纳法简单证一证. 证出这个后,我们只需动态加入每一个边,并查看一下有哪些边能够被删除(删掉后联通块依 ...
- idea maven projects 工具栏按钮的作用
1.Execute Maven Goal 弹出可执行的 Maven 命令的输入框.有些情况下我们需要通过书写某些执行命令来构建项目,就可以通过此按钮 2.Toggle Offline Mode 英文 ...
- R_Studio(神经网络)BP神经网络算法预测销量的高低
BP神经网络 百度百科:传送门 BP(back propagation)神经网络:一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络 #设置文件工作区间 setwd('D:\\ ...