1 递归,很简单
代码:
#include
using namespace std;
typedef struct node{
int data;
struct node * pNext;
}Node ,*pNode;
void createNode(pNode & pHead){
int temp;
scanf("%d",&temp);
pNode p,q;
boo...
分类:
其他好文 时间:
2014-08-08 21:28:56
阅读次数:
314
队列,是一种先进先出的线性表,它只允许在队头删除,在队尾插入,链式队列和单链表操作类似,但是有队首指针和队尾指针,下面是链式队列的表示和实现:#include using namespace std;//队列的链式表现与实现struct QNode{ int data; QNode *n...
分类:
其他好文 时间:
2014-08-08 17:37:06
阅读次数:
257
两个有趣的笔试题,看看你是不是都能轻松搞定~
有n瓶粉末,一瓶有毒。有毒的粉末融在水里一小时后水会变蓝。你有一些试管,问最少需要多少时间和多少试管就能确定毒粉末呢?不考虑粉末导入试管的时间。
给定一个无环的单链表,如何快速定位位于链表中间的那个节点?返回值为指向中间节点的指针。...
分类:
其他好文 时间:
2014-08-08 04:19:55
阅读次数:
230
//单链表反序
public class SingleLinkedListReverse {
public static void main(String[] args) {
Node head = new Node(0);
Node temp = null;
Node cur = null;
for (int i = 1; i <= 10; i++) {
tem...
分类:
编程语言 时间:
2014-08-07 13:10:20
阅读次数:
256
题目:复制一个复杂链表,所谓复杂链表指的是每个节点含有两个指针,一个指向单链表的下一个结点,一个指向单链表中的任意某个结点,或者该指针为空。
为了方便起见,我们将待复制的链表称为原型链表,将复制后的新链表称为复制链表,将指向下一个结点的指针定义为next指针,指向其他位置的指针定义为any指针。《剑指offer》上给出了三种解决方法:(1)常规法;(2)空间换时间法;(3)紧随复制法。书上并给出了第三种方法的实现代码。这里我根据书上的提示,给出第二种方法的代码。...
分类:
其他好文 时间:
2014-08-05 22:45:00
阅读次数:
346
typedef struct ListNode{
int data;
struct ListNode *next;
}ListNode;
//递归一
ListNode *ReverseList (ListNode *pHead, ListNode *nHead = NULL)
{
//每次取下第一个节点头插法创建新链表
//nHead为反转后链表的头节点
if(pHead == NUL...
分类:
其他好文 时间:
2014-08-05 19:36:50
阅读次数:
241
题目:存在一个单链表,头指针为head,实现单链表的反转Node *Reverse(Node *head)。
该算法的求解办法有很多,如:
方法1:先顺序变量单链表,将结点保存到栈中,在从栈中弹出结点,重新建立一个新的单链表;
方法2:用《剑指offer》里面给出的算法,用三个指针来实现;
方法3:采用递归实现,是方法2的递归实现形式。
本文主要给出方法2和方法3,在给出具体的代码之前,先要注意几个问题:
...
分类:
其他好文 时间:
2014-08-04 18:01:57
阅读次数:
200
创建单线性链表,常见的有头插法、尾插法创建线性链表,常见的操作有:创建链表、查找、删除、增加元素、求逆链等操作。
这里首先才有头插法创建链表:
//头指针唯一确定一个单链表
#define MaxSize 15
typedef int elem_type ;
typedef struct linklist
{
elem_type data;
str...
分类:
其他好文 时间:
2014-08-04 17:51:41
阅读次数:
219
题目:已知有两个有序的单链表,其头指针分别为head1和head2,实现将这两个链表合并的函数:
Node* ListMerge(Node *head1,Node *head2)
这个算法很像我们排序算法中的归并排序,只能说“很像”,因为思想是一样的,但是这个与归并排序还是有区别的,区别如下:
1.归并排序是针对有序数组,而这里是有序链表;
2.归并排序排序的时间复杂度为o(nlogn),而这里的时间复杂度最坏情况下为O(m+n),最好的情况下为...
分类:
其他好文 时间:
2014-08-04 17:43:47
阅读次数:
296
题目:给出一个单链表,返回倒数第K个结点,最后一个结点为倒数第1个。
《剑指offer》上面给的解法是设置两个指针,这里记为p1、p2,先让p2走(k-1)步,然后p1、p2同时走,当p2走到最后一个结点时,p1所指向的结点就是倒数第k个结点。
我觉得按照这样的逻辑写代码反而更容易出错,因为我们需要把我两件重要的问题:(1).p2先走(k-1)步;(2)循环结束的条件是p2到达最后一个结点,即p2->next==NULL。显然这样不太容易控制,我的想法是:先让p2先走k步,然后p...
分类:
其他好文 时间:
2014-08-04 14:22:17
阅读次数:
232