- 浏览: 510221 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jkxydp:
算法运行的结果根本就不对。
BM算法. -
soarwindzhang:
感谢博主的分享,我今天看了您的UFSET非递归的路径压缩时感觉 ...
并查集 -
zhangning290:
楼主好像只考虑了坏字符规则,。没有考虑好后缀
BM算法. -
lsm0622:
文字描述有错误 误导新学者
求有向图的强连通分量(scc):Tarjan算法 -
knightchen:
博主,你太强了!这篇文章对我学习C++多线程很有帮助!谢谢
并发学习之一_windows下ZThread在CodeBlocks上的安装与配置
1,给定一单链表A1->A2->A3->......->AN, 转换为A2->A1->A4->A3->.....->AN(如果N是偶数),转换为 A1->A3->A2->A5->A4->....->AN(如果N是奇数),要求是只能便利一遍链表。
2,逆序一个链表
3,合并两个有序链表
#include <stdio.h> #include <stdlib.h> typedef struct _Node Node; struct _Node { int data; Node* next; }; Node* node_new(int data, Node* next) { Node* node = (Node*)(malloc(sizeof(Node))); node->data=data; node->next=next; return node; } void node_free(Node* node) { free(node); } typedef int BOOL; #define FALSE (0) #define TRUE (!FALSE) BOOL vswap_inner(Node** pp, Node** dangling) { // pp: input as the current head node // output as the even point. // dangling: output only if(*pp==NULL) { return TRUE; } else { Node* first = *pp; Node* rest = first->next; Node* ndangling; BOOL even = vswap_inner(&rest,&ndangling); if(even) { *pp=rest; *dangling=first; return FALSE; } else { ndangling->next = first; first->next = rest; *pp=ndangling; //*dangling=NULL; // Not useful return TRUE; } } } void vswap(Node** pp_head) { Node *dangling = NULL; BOOL even = vswap_inner(pp_head,&dangling); if(!even) { dangling->next = *pp_head; *pp_head=dangling; } } void node_seq_print(Node* node) { if(node==NULL) { printf("\n"); } else { printf("%d ",node->data); node_seq_print(node->next); } } int main() { Node *node = node_new(1, node_new(2, node_new(3, node_new(4, node_new(5, NULL) )))); Node *node2 = node_new(1, node_new(2, node_new(3, node_new(4, NULL) ))); vswap(&node); vswap(&node2); node_seq_print(node); node_seq_print(node2); return 0; }
2,逆序一个链表
//定义数据结构 struct Node { Node(int i):data(i),next(0){} int data; Node* next; }; Node* reverseList(Node* head) { if(head==NULL||head->next==NULL) return head; Node* p1=head; Node* p2=p1->next; Node* p3=p2->next; p1->next=NULL; while(p3!=NULL) { p2->next=p1; p1=p2; p2=p3; p3=p3->next; } p2->next=p1; head=p2; return head; } Node* recursiveReverseList(Node* head) //递归方法逆序 { Node *rHead; if ((head == NULL) || (head->next == NULL)) { return head; } else { rHead = recursiveReverseList(head->next); head->next->next = head; head->next = NULL; return rHead; } } //释放带环的节点 void freeList(Node* head) { Node* p; Node* tmp; for(p=head;p;p=tmp) { tmp=p->next; delete p; } } //打印链表中的数据,存在环,必定是死循环 void printList(Node* head) { Node* p; for(p=head;p;p=p->next) cout<< p->data<<(p->next? " ":""); cout<<endl; return; } int main() { Node *node=new Node(0); Node* head=node; for(int i=1;i<7;++i) { node->next=new Node(i); node=node->next; } printList(head); head=reverseList(head); printList(head); head=recursiveReverseList(head); printList(head); free(head); return 0; }
3,合并两个有序链表
#include <iostream> using namespace std; //定义数据结构 struct Node { Node(int i):data(i),next(0){} int data; Node* next; }; //释放带环的节点 void freeList(Node* head) { Node* p; Node* tmp; for(p=head;p;p=tmp) { tmp=p->next; delete p; } } //打印链表中的数据,存在环,必定是死循环 void printList(Node* head) { Node* p; for(p=head;p;p=p->next) cout<< p->data<<(p->next? " ":""); cout<<endl; return; } //非递归合并两个有序链表 Node * Merge(Node *head1 , Node *head2) { if ( head1 == NULL) return head2 ; if ( head2 == NULL) return head1 ; Node *head = NULL ; Node *p1 = NULL; Node *p2 = NULL; if ( head1->data < head2->data ) { head = head1 ; p1 = head1->next; p2 = head2 ; } else { head = head2 ; p2 = head2->next ; p1 = head1 ; } Node *pcurrent = head ; while ( p1 != NULL && p2 != NULL) { if ( p1->data <= p2->data ) { pcurrent->next = p1 ; pcurrent = pcurrent->next ; p1 = p1->next ; } else { pcurrent->next = p2 ; pcurrent = pcurrent->next ; p2 = p2->next ; } } if ( p1 != NULL ) pcurrent->next = p1 ; if ( p2 != NULL ) pcurrent->next = p2 ; return head ; } //递归合并两个有序链表 Node * ReMerge(Node *head1 , Node *head2) { if ( head1 == NULL) return head2 ; if ( head2 == NULL) return head1 ; Node *head = NULL ; if ( head1->data < head2->data ) { head = head1 ; head->next=ReMerge(head1->next,head2); } else { head = head2 ; head->next=ReMerge(head1,head2->next); } return head ; } int main() { Node *node1=new Node(0); Node* head1=node1; for(int i=1;i<9;i+=3) { node1->next=new Node(i); node1=node1->next; } printList(head1); Node *node2=new Node(1); Node* head2=node2; for(int i=3;i<9;i+=2) { node2->next=new Node(i); node2=node2->next; } printList(head2); //Node* head=Merge(head1,head2); Node* head=ReMerge(head1,head2); printList(head); free(head); return 0; }
发表评论
-
称球问题
2010-12-16 14:13 1266[节选]http://mindhacks.cn/2008/06 ... -
平均要取到第几个随机数才会让序列第一次下降
2010-12-15 12:05 1285[转载]http://www.matrix67.com/blo ... -
输出一个数列的逆序数
2010-12-10 20:39 26811,这个问题算法导论讲归并排序时,提到过。 找到一个实现代码, ... -
给出前序和中序序列,输出后序序列
2010-12-10 11:46 15191,给出一个实现代码: #include <stdi ... -
输入是一个n*m的矩阵,要求找到其中最大的全0字矩阵
2010-11-25 12:16 15231,分析: 这个题其实就是最大子矩阵,只不过把0的权设为1,其 ... -
一些常见的海量数据处理题目
2010-11-25 11:23 1593很长时间没有更新blog了,先唠叨两句. 这段时间发生了几件不 ... -
不限数目的1、5、10、20、50面额的纸币,有多少种方法凑出100元
2010-09-21 17:22 20131,有不限数目的1、5、10、20、50面额的纸币,有多少种方 ... -
输出1到最大的N位数
2010-09-01 14:23 13241,题意: 输入数字n,按顺序输出从1最大的n位10进制数。比 ... -
找出数组中两个只出现一次的数字
2010-08-26 13:13 18481,题意: 一个整型数组里除了两个数字之外,其他的数字都出现了 ... -
字符串的逆序
2010-08-26 11:23 8311,老题目了,给个自己的版本. #include < ... -
寻找丑数
2010-08-26 10:57 31181,题意: 把只包含质因子2、3和5的数称作丑数(Ugly N ... -
寻找连续序列,使其和等于n
2010-08-26 10:15 11781,分析: 首尾两个游标. 如果当前sum < n, 尾 ... -
n个筛子的和出项的次数
2010-08-25 15:47 8411, 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S ... -
从文件中随即提取一个字符串
2010-05-12 12:54 768算法思路: 读入第一个:概率1保留。 读入第二个:1/2保留上 ... -
编写一些代码,确定一个变量是有符号数还是无符号数。
2010-05-12 12:53 9391,参数是一个值: #define ISUNSIGNED(va ... -
寻找移位有序数组的转折点
2010-05-09 00:22 14361,题意: 原来一个有序数组,分成前后两部分并将两部分交换得到 ... -
递归返回最大值
2010-05-06 19:20 7981,实例代码: #include<iostream& ... -
设定哨兵,返回最大值
2010-05-06 19:16 10281,精炼的代码总是那么迷人. 实例代码: #include ... -
最长平台
2010-05-06 19:01 9861,已知一个已经从小到大排序的数组,这个数组中的一个平台(Pl ... -
返回'+','-'表达式的计算结果
2010-05-04 17:07 7421,实例代码: #include <iostream ...
相关推荐
在计算机科学领域,链表...最后,链表的面试题目往往不只考察编程技能,还包括逻辑思维能力、问题解决能力等。面试者在准备这些题目时,不仅要学会算法的具体实现,还要理解算法背后的原理,这样才能在面试中表现出色。
根据提供的文件信息,这里将对链表相关的面试题目进行总结,并深入探讨其中涉及的数据结构与算法知识点。 ### 链表基础知识回顾 在讨论具体的面试题之前,我们首先需要了解链表的基本概念及其操作方法。链表是一种...
- 反转链表:常见的面试题目,有多种算法实现,如迭代法、递归法等。 - 合并两个有序链表:将两个有序链表合并成一个新的有序链表。 - 删除中间节点:给定一个指向链表中间节点的指针,如何删除这个节点? - ...
在IT行业的面试中,经典面试题目是评估求职者技能、经验和知识深度的重要工具。这些题目通常涵盖编程语言、数据结构、算法、操作系统、数据库、网络、软件工程等多个方面。以下是一些可能出现的经典面试题目及其详细...
以上是链表面试题目的详解,掌握这些知识点,可以在面试中展现出扎实的编程基础和问题解决能力。链表题目虽然简单,但涵盖了许多编程和逻辑思维的基础,因此对于求职者来说,熟练掌握链表操作至关重要。
【标题】:“2018最新BAT+面试题目”涵盖了中国顶级互联网公司——百度(Baidu)、阿里巴巴(Alibaba)和腾讯(Tencent)在2018年招聘过程中的热门面试问题。这些题目旨在测试候选人在技术、逻辑思维、问题解决以及...
以下是对链表及其相关面试题目的详细解析。 1. **链表的基本概念** 链表不同于数组,它不是一个连续的内存空间,而是通过节点间的指针连接起来的一系列元素。每个节点包含两部分:数据域,用于存储数据;指针域,...
### 数据结构面试题目解析 1. **题目一**:“链表与数组的不同之处” - 数组是顺序存储的,访问时间复杂度为O(1),但插入删除操作可能需要移动大量元素,时间复杂度为O(n)。 - 链表是链式存储,访问时间复杂度为O...
链表作为数据结构中的一种,其操作经常出现在编程面试和算法题目中。这里我们总结了几个关于链表的典型问题及其解题方法。 1. **返回倒数第k个节点** (剑指offer 22) - **方法一**:两次遍历法 - 首先遍历一次...
在C#这个强大的编程语言领域,面试题目常常涵盖了多个方面的知识,包括但不限于基础语法、面向对象编程、集合与数据结构、异常处理、内存管理、多线程、泛型、LINQ、委托与事件、设计模式、.NET框架以及最新的C#版本...
在C语言笔试面试中,链表是一道常考题,以下是两个常见的链表题目及其解决方案。 链表逆置 链表逆置是将链表的节点顺序逆转的过程。例如,原始链表为1->2->3->4->5,逆置后的链表为5->4->3->2->1。 解决方案: `...
华为公司作为全球知名的IT巨头,其面试题目常常涵盖了计算机科学和技术支持等多个领域,旨在测试应聘者的综合素质和技术能力。以下是对这些文件名所暗示的面试题目的解析和相关知识点的详细介绍: 1. **华为一道...
【微创面试题目】涵盖的内容广泛,包括数据结构、算法、C++基础知识、线程与进程、内存管理、字符串处理、委托与反射等多个方面。以下是对这些知识点的详细说明: 1. **链表操作**: - **链表逆序**:涉及到对链表...
【链表操作】如链表反转和有序链表合并是常见的面试题目,也是编程练习的重点。这些操作通常需要对指针或引用有深入的理解。链表反转涉及到改变节点的指针方向,而有序链表合并则需要在保持顺序的同时合并两个已排序...
"互联网大厂面试题目大全" 在这份面试题目大全中,我们可以看到涵盖了互联网行业中的多个领域,包括算法、数据结构、操作系统、数据库、计算机网络、软件设计等等。 1.1.1 如何实现一个高效的单向链表逆序输出? ...
在IT行业中,面试是检验求职者技能和潜力的重要环节,尤其对于知名公司如谷歌、百度、腾讯、迅雷、网易和华为来说,他们的面试题目往往代表着行业内的高标准和前沿技术趋势。这些公司的面试通常涵盖了算法、数据结构...
"移动技术面试题目" 移动技术面试题目是一个移动公司通信类技术面试的题目汇总,涵盖了 TCP/IP、移动通信、数据传输、计算机网络、数据库设计等多个方面的知识点。 一、TCP/IP 层次结构和协议 TCP/IP 协议栈有四层...
题目“剑指offer”中的面试题27,就是关于这个转换过程。这个过程的核心在于如何通过迭代或递归的方式,保持节点的顺序,并正确设置链表中的next和prev指针。首先,我们需要理解双向链表的结构,每个节点不仅包含...
### Intel的笔试和面试题目解析 #### 智力题解析 1. **相遇轮船问题**:这个问题实际上是一个经典的数学逻辑题。由于两艘轮船分别从两个地点出发,相向而行,假设今天中午从勒阿佛开出的船会在7天后到达纽约,而在...
本资源"常见算法面试题目有代码详解"显然是一份针对算法面试的珍贵资料,涵盖了链表、图、树以及数据元素等核心概念。下面将详细阐述这些领域的关键知识点。 首先,链表是一种线性数据结构,它的元素(节点)不连续...