数据结构
qq2250844705
主要从事通信工程的工作
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
约瑟夫问题2
约瑟夫问题是一个著名的趣题。这里我们稍稍修改一下规则。有n个人站成一列。并从头到尾给他们编号,第一个人编号为1。然后从头开始报数,第一轮依次报1,2,1,2…然后报到2的人出局。接着第二轮再从上一轮最后一个报数的人开始依次报1,2,3,1,2,3…报到2,3的人出局。以此类推直到剩下以后一个人。现在需要求的即是这个人的编号。原创 2017-10-13 10:42:18 · 667 阅读 · 0 评论 -
约瑟夫问题1
约瑟夫问题1: 约瑟夫问题是一个非常著名的趣题,即由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。 1.1数组法: 用一个数组记录所有人的状态,初始值为各自的变化,如果位置的人出局,则将其值设为0。int getResult(int n, int m) { // write code here原创 2017-10-12 23:08:04 · 672 阅读 · 0 评论 -
链表的反转
基本的算法思想: 首先要考虑链表为空和链表只有一个节点的情况; 在每一次反转的时候,需要记录当前节点的下一个节点和上一个节点,然后让其的next指针指向其前一个节点。ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL || pHead->next==NULL) return pHead;原创 2017-10-12 22:38:07 · 199 阅读 · 0 评论 -
判断两个链表是否相交,及其第一个公共交点
输入两个链表,找出它们的第一个公共结点。 算法思路:若两个链表相交,则从交点开始连个链表的交点都相同。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {publi原创 2017-10-11 17:06:49 · 262 阅读 · 0 评论 -
判断一个链表是否有环,并找出环的入口
一个链表中包含环,请找出该链表的环的入口结点。 ListNode* EntryNodeOfLoop(ListNode* pHead) { if(pHead==NULL || pHead->next==NULL) return NULL; ListNode *fast=pHead; ListNode *slow=pHead原创 2017-10-11 16:42:05 · 249 阅读 · 0 评论 -
链表的单个节点的删除
实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。 给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true 算法思路: 利用该节点可以访问其下一个节点,可以将下一个节点的值复制给该节点,将下一个节点删除。struct ListNode { int val; struct ListNode *next; ListNode(int原创 2017-10-10 14:23:17 · 906 阅读 · 0 评论 -
找出单链表的倒数第k个节点
首先需要对单链表进行检查,判断是否为空链表; 判断k的值是否合理; k的值是否大于链表的长度,k的值是否为0。struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};class Solution {publi原创 2017-10-10 14:06:31 · 369 阅读 · 1 评论 -
两个有序链表的合并
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 1.递归方法struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};ListNode* Merge(ListNode*原创 2017-10-13 11:03:57 · 294 阅读 · 0 评论
分享