![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
_binary
这个作者很懒,什么都没留下…
展开
-
删除链表中重复元素
思路:用一个指针p遍历链表,然后对每次p之后的元素查看是否有相同元素示例:list RemoveDupNode(list l){ position p, q, t; p = l->next; while (p){ q = p; while (q->next){ if (q->next->data == p->data){ t = q->next; q->原创 2015-04-22 01:45:46 · 459 阅读 · 0 评论 -
树的建立与层序遍历
原题:http://www.patest.cn/contests/mooc-ds2015spring/03-%E6%A0%911(List Leaves)思路:用结构数组保存结点,下标对应结点数据值,结构中的两个变量left与right保存左右孩子在数组中的下标。代码:#define _CRT_SECURE_NO_WARNINGS#include #include #include原创 2015-04-23 16:47:32 · 305 阅读 · 0 评论 -
还原二叉树
原题:http://www.patest.cn/contests/mooc-ds2015spring/03-%E6%A0%912(Tree Traversals Again)思路:push结点的顺序就是前序遍历的顺序,pop的顺序就是中序遍历的顺序,跟据前序与中序可还原二叉树代码:#include #include #include using namespace std;t原创 2015-04-24 21:07:08 · 424 阅读 · 0 评论 -
单链表的倒数第K个数
思路:建立两个指针 ,先让第一个指针走K步,然后第二个指针也开始走,两个指针速度一致,那么第一个指针到链表末尾的时候,第二个指针就在地K个位置上。示例:int ReverseKth(list l, int k){ position p1, p2; //p1先走k步 int i = 0; p1 = l->next; while (p1){ ++i; if (i == k)原创 2015-04-21 21:01:11 · 308 阅读 · 0 评论 -
快速找到单链表的中间节点
思路:可以先遍历链表求出链表的总长度,然后找到中间节点的位置。比较快的方法是设置两个指针都指向头节点,第一个指针每次移动一步,第二个指针每次移动两步,那么第二个指针到末尾的时候第一个指针就在中间位置了。示例:int GetMidNode(list l){ position p, mid; p = mid = l; while (p->next != NULL){ if (p->ne原创 2015-04-21 21:15:57 · 651 阅读 · 0 评论 -
反转链表的几种方法
方法一:新建一个新的链表,然后把原来的链表从第一个结点依次用头插法加入到新的链表中方法二:设置指针previous,current,next,把每个结点一次反转list Reverse(list l){ position previous, current, next; current = l->next; previous = NULL; while (current){ ne原创 2015-04-21 22:30:10 · 449 阅读 · 0 评论 -
求有环单链表中的环长、环起点、链表长
原文:http://www.cnblogs.com/xudong-bupt/p/3667729.html1.判断单链表是否有环 使用两个slow, fast指针从头开始扫描链表。指针slow 每次走1步,指针fast每次走2步。如果存在环,则指针slow、fast会相遇;如果不存在环,指针fast遇到NULL退出。 就是所谓的追击相遇问题: 2.求转载 2015-04-21 23:06:52 · 265 阅读 · 0 评论