热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

链表相关操作

1#include2usingnamespacestd;3typedefstructlist4{5intdata;6structlist*next;7list(

1 #include
2 using namespace std;
3 typedef struct list
4 {
5 int data;
6 struct list* next;
7 list():data(0),next(NULL){}
8 }List;
9
10 //1. 后插法插入数据
11 void insertData(List *p, int data)
12 {
13 if (p == NULL)
14 return;
15
16 //申请空间
17 List *tmp = (List *)malloc(sizeof(List));
18 tmp->data = data;
19 tmp->next = NULL;
20
21 //插入链表
22 while (p->next != NULL)
23 p = p->next;
24 p->next = tmp;
25 }
26 //2. 打印数据
27 void printData(List *p)
28 {
29 while (p != NULL)
30 {
31 cout <data <32 p = p->next;
33 }
34 }
35
36 //3.链表逆序1
37 /*******************************************
38 三个指针,pre,cur,next
39 先保存cur的next到next中;
40 然后cur->next指向前面的;
41 pre和cur向前推进,next只是临时存储cur->next
42 *******************************************/
43 List* revertList(List *p)
44 {
45 List *pre = nullptr;
46 List *next = nullptr;
47 while (p != nullptr)
48 {
49 next = p->next;
50 p->next = pre;
51 pre = p;
52 p = next;
53 }
54 return pre;
55 }
56 //4.链表逆序2
57 /***********************************
58 将链表看成两个结点,头结点和后面整体
59 ***********************************/
60 List* revertList2(List *p)
61 {
62 List *newphead;
63 if ((p == NULL) || (p->next == NULL))
64 return p;
65 newphead = revertList2(p->next);
66 p->next->next = p;
67 p->next = NULL;
68 return newphead;
69 }
70
71
72 int main()
73 {
74 List *phead = new List;
75 for (int i = 0; i <20; i++)
76 {
77 insertData(phead, i);
78 }
79
80 printData(phead);
81
82 phead=revertList(phead);
83
84 printData(phead);
85 cout <<"AAAAAAAAAAAAA" <86 phead = revertList2(phead);
87
88 printData(phead);
89
90
91 return system("pause");
92 }

 



推荐阅读
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 二叉树的链表实现
    本文介绍了一种使用链表结构表示二叉树的方法。通过定义节点结构和相关操作函数,可以方便地创建、插入和遍历二叉树。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • HDU 2871 内存管理问题(线段树优化)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2871。本题涉及内存管理操作,包括重置、申请、释放和查询内存块。通过使用线段树进行高效管理和维护。 ... [详细]
  • 本文介绍如何在 C++ 中使用链表结构存储和管理数据。通过具体示例,展示了静态链表的基本操作,包括节点的创建、链接及遍历。 ... [详细]
  • 树链问题的优化解法:深度优先搜索与质因数分解
    本文介绍了一种通过深度优先搜索(DFS)和质因数分解来解决最长树链问题的方法。我们通过枚举树链上的最大公约数(GCD),将所有节点按其质因子分类,并计算每个类别的最长链,最终求得全局最长链。 ... [详细]
  • 查找最小值的操作是很简单的,只需要从根节点递归的遍历到左子树节点即可。当遍历到节点的左孩子为NULL时,则这个节点就是树的最小值。上面的树中,从根节点20开始,递归遍历左子 ... [详细]
  • 本文详细介绍了C++中map容器的多种删除和交换操作,包括clear、erase、swap、extract和merge方法,并提供了完整的代码示例。 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
  • Linux环境下C语言实现定时向文件写入当前时间
    本文介绍如何在Linux系统中使用C语言编程,实现在每秒钟向指定文件中写入当前时间戳。通过此示例,读者可以了解基本的文件操作、时间处理以及循环控制。 ... [详细]
  • CSS高级技巧:动态高亮当前页面导航
    本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 本文探讨了如何在 F# Interactive (FSI) 中通过 AddPrinter 和 AddPrintTransformer 方法自定义类型(尤其是集合类型)的输出格式,提供了详细的指南和示例代码。 ... [详细]
  • 本文详细解释了为什么在成功执行移动赋值操作后,对象的析构函数会被调用,并提供了代码示例和详细的分析。 ... [详细]
author-avatar
倩倩倩倩倩倩雯-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有