C实现单链表
typedef int DataType;
typedef struct ListNode
{
DataType data;
struct ListNode* next;
}ListNode; //初始化链表
void InitList(ListNode** pphead)
{
*pphead = NULL;
} //创建节点
ListNode* BuyNode(DataType x)
{
ListNode* tmp = (ListNode*)malloc(sizeof(ListNode));
assert(tmp);
tmp->data = x;
tmp->next = NULL;
return tmp;
} //尾插
void PushBack(ListNode** phead,DataType x)
{
if(NULL == *phead)
{
*phead = BuyNode(x);
}
else
{
ListNode* tial = *phead;
while(tial->next != NULL)
{
tial = tial->next;
}
tial->next = BuyNode(x);
}
} //打印
void Print(ListNode* phead)
{
ListNode* tmp = phead;
while(tmp != NULL)
{
printf("%d->",tmp->data);
tmp = tmp->next;
}
printf("NULL");
printf("\n");
} //前插
void PushFront(ListNode** phead,DataType x)
{
if(*phead == NULL)
{
*phead = BuyNode(x);
}
else
{
ListNode* tmp = BuyNode(x);
tmp ->next = *phead;
*phead = tmp;
}
} //尾删
void PopBack(ListNode** phead)
{
if(*phead == NULL)
{
printf("kd");
return;
}
else
{
ListNode* tmp = *phead;
(*phead) = (*phead)->next;
free(tmp);
}
} //找节点
ListNode* Find(ListNode* phead,DataType x)
{
if(NULL == phead)
{
printf("KONG");
return;
}
else
{
ListNode* cur = phead;
while(cur)
{
if(cur->data = x)
{
return cur;
}
cur = cur->next;
}
return cur;
}
} //插入
void Insert(ListNode* pos,DataType x)
{
ListNode* tmp = BuyNode(x);
tmp->next = pos->next;
pos->next = tmp;
} //翻转单链表
ListNode* Reverse(ListNode* phead)
{
ListNode* newhead = NULL;
ListNode* tmp = phead;
while(tmp)
{
ListNode* cur = tmp;
tmp = tmp->next;
cur->next = newhead;
newhead = cur;
/*ListNode* cur = tmp->next;
tmp->next = newhead;
newhead = tmp;
tmp = tmp->next;*/
}
return newhead;
} //从尾到头打印单链表
void printListFromTailToHead(ListNode* head)
{
if(head == NULL)
{
return;
}
ListNode *newhead = NULL;
ListNode *cur = head;
while(cur)
{
ListNode *tmp = cur;
cur = cur->next;
tmp->next = newhead;
newhead = tmp;
}
ListNode *p = newhead;
while(p)
{
cout<<p->val<<endl;
p = p->next;
}
}
C实现单链表的更多相关文章
- 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法
有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...
- 单链表的C++实现(采用模板类)
采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作. 链表结构定义 定义单链表 ...
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- [LeetCode] Linked List Cycle II 单链表中的环之二
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...
- c++单链表基本功能
head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...
- 单链表、循环链表的JS实现
数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑...... 当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...
- C代码实现非循环单链表
C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...
- 分离的思想结合单链表实现级联组件:CascadeView
本文介绍自己最近做省市级联的类似的级联功能的实现思路,为了尽可能地做到职责分离跟表现与行为分离,这个功能拆分成了2个组件并用到了单链表来实现关键的级联逻辑,下一段有演示效果的gif图.虽然这是个很常见 ...
- 数据结构:单链表结构字符串(python版)添加了三个新功能
#!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...
- 数据结构:单链表结构字符串(python版)改进
此篇文章的replace实现了字符串类的多次匹配,但依然有些不足. 因为python字符串对象为不变对象,所以replace方法并不修改原先的字符串,而是返回修改后的字符串. 而此字符串对象时用单链表 ...
随机推荐
- R语言-来自拍拍贷的数据探索
案例分析:拍拍贷是中国的一家在线借贷平台,网站撮合了一些有闲钱的人和一些急用钱的人.用户若有贷款需求,可在网站上选择借款金额. 本项目拟通过该数据集的探索,结合自己的理解进行分析,最终目的的是初步预测 ...
- luogu【P3387】【模板】缩点
原题入口 PS:这个题数据是由Hany01大大出出来的 %%% 这个题显然是一道强联通+DAGdp的题 (题目背景有= =) 缩点的原因就是:不缩会一直在一个地方绕圈圈 而且不能进行后面的DAPdp ...
- data数据不一致的问题
经常会遇到that.data能打印出来(能访问到),而that.data.xxx不能打印(为空)的情况.特别是在调用了云方法,然后setData的时候,为什么会出现这样的情况不明. 解决方法,将需要用 ...
- java设计模式-----11、代理模式
Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问. 所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代 ...
- systemd的作用
早上群上讨论了一下systemd的作用,还导致了一个人的直接退群,出于求知心理,搜索了一些systemd,对此也作出了一些相应的整理: 一.systemd的诞生: 学习嵌入式bootloader与ke ...
- [转]Git教程【译】
[转]Git教程[译] http://www.cnblogs.com/zhangjing230/archive/2012/05/09/2489745.html 原文出处:http://www.voge ...
- 转: web 页面加载速度优化实战-100% 的飞跃提升
前言 一个网站的加载速度有多重要? 反正我相信之前来 博主网站 的人至少有 50% 在加载完成前关闭了本站. 为啥捏? 看图 首页完整加载时间 8.18s,看来能进来看博主网站的人都是真爱呀,哈哈. ...
- css样式加载顺序
css样式加载顺序: A: id选择器指定的样式 > 类选择器指定的样式 > 元素类型选择器指定的样式 B: 如果要让某个样式的优先级变高,可以使用!important来指定: .clas ...
- linq使用字符串参数排序
今天找了半天资料,有两种种方法: 1.把字符串参数变为lambda表达式 2.使用System.Linq.dynamic引用 这里我讲第二种方法 第一步:nuget搜索关键字"dynamic ...
- python全栈开发-Day5 集合
python全栈开发-Day5 集合 一.首先按照以下几个点展开对集合的学习 #一:基本使用 1 .用途 2 .定义方式 3 .常用操作+内置的方法 #二:该类型总结 1. 存一个值or存多个值 只能 ...