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实现单链表的更多相关文章

  1. 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

    有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...

  2. 单链表的C++实现(采用模板类)

    采用模板类实现的好处是,不用拘泥于特定的数据类型.就像活字印刷术,制定好模板,就可以批量印刷,比手抄要强多少倍! 此处不具体介绍泛型编程,还是着重叙述链表的定义和相关操作.  链表结构定义 定义单链表 ...

  3. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  4. [LeetCode] Linked List Cycle II 单链表中的环之二

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

  5. c++单链表基本功能

    head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...

  6. 单链表、循环链表的JS实现

    数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑......   当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...

  7. C代码实现非循环单链表

    C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...

  8. 分离的思想结合单链表实现级联组件:CascadeView

    本文介绍自己最近做省市级联的类似的级联功能的实现思路,为了尽可能地做到职责分离跟表现与行为分离,这个功能拆分成了2个组件并用到了单链表来实现关键的级联逻辑,下一段有演示效果的gif图.虽然这是个很常见 ...

  9. 数据结构:单链表结构字符串(python版)添加了三个新功能

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

  10. 数据结构:单链表结构字符串(python版)改进

    此篇文章的replace实现了字符串类的多次匹配,但依然有些不足. 因为python字符串对象为不变对象,所以replace方法并不修改原先的字符串,而是返回修改后的字符串. 而此字符串对象时用单链表 ...

随机推荐

  1. Struts2【OGNL、valueStack】就是这么简单

    什么是OGNL表达式? OGNL是Object Graphic Navigation Language 是操作对象属性的开源表达式. Struts2框架使用OGNL作为默认的表达式语言. 为什么我们学 ...

  2. 【POI2001】【HDU1814】和平委员会

    题面 Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条 ...

  3. 【BZOJ2152】聪聪可可(点分治)

    [BZOJ2152]聪聪可可(点分治) 题面 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电 ...

  4. Solidity by Example详解 - Voting

    Example地址:https://solidity.readthedocs.io/en/develop/solidity-by-example.html#voting Voting程序的功能: 这个 ...

  5. golang channel的使用以及调度原理

    golang channel的使用以及调度原理 为了并发的goroutines之间的通讯,golang使用了管道channel. 可以通过一个goroutines向channel发送数据,然后从另一个 ...

  6. Android OpenGL ES 开发(九): OpenGL ES 纹理贴图

    一.概念 一般说来,纹理是表示物体表面的一幅或几幅二维图形,也称纹理贴图(texture).当把纹理按照特定的方式映射到物体表面上的时候,能使物体看上去更加真实.当前流行的图形系统中,纹理绘制已经成为 ...

  7. centos7安装eclipse方法

    很多喜欢编程的朋友并不是很喜欢使用Windows来编写程序,尽管可视化编程但是操作相对繁琐,因而只在电脑上装有Linux系统,那么我们来说一下Linux下安装Java EE编程工具eclipse的方法 ...

  8. MacOS中升级openssl

    MacOS中升级openssl   ➜  ~ brew instal openssl 使用情况中始终发现,openssl并没有真正升级   在/usr/local/Cellar/openssl/目录中 ...

  9. 关于classpath

    classpath是用来设计JAVA类文件(.class)所在的路径 classpath的主要作用就是当你在一个shell窗口下执行命令时,可以从在classpath中设置的目录搜索,不用一层再一层的 ...

  10. [Oracle]UNIX与Windows 2000上Oracle的差异(I)

    作者:Ian Adam & David Stien, SAIC Ltd 日期:19-Dec-2003 出处:http://www.dbanotes.net翻译:Fenng ---------- ...