题目的意思是给定一个链表的头指针,快速判断一个链表是不是有环,如果有环,返回环的起始位置。该题的经典做法是使用两个指针,两个指针均指向头结点,其中一个是快指针,一次走两步;另一个是慢指针,一次只走一步,当两个指针相遇时,证明有环。...
分类:
其他好文 时间:
2015-09-17 13:40:56
阅读次数:
166
一、题目:在O(1)时间删除链表结点题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。 原文采用的是C/C++,这里采用C#,节点定义如下: public class Node { // 数据域 public T Item { ...
分类:
其他好文 时间:
2015-08-28 15:19:45
阅读次数:
196
给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下: struct?ListNode
{??????int????????m_nKey;
??????ListNode*??m_pNext;
}; 函数的声明如下: void?Delet...
分类:
其他好文 时间:
2015-08-26 22:46:24
阅读次数:
293
说明:这篇文章是学习交流,转载请注明出处。欢迎转载! 题目:已知有两个有序的单链表,其头指针分别为head1和head2。实现将这两个链表合并的函数: Node* ListMerge(Node *head1,Node *head2) 这个算法非常像我们排序算法中的归并排序。仅仅...
分类:
编程语言 时间:
2015-08-25 21:08:56
阅读次数:
1416
题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode*pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。代码如下:import java.util.*;/*public class Li...
分类:
其他好文 时间:
2015-08-25 19:03:52
阅读次数:
124
这次的代码比较长,原因是比之前的Vector实现增加了许多的操作,而且毕竟指针操作嘛,处理起来稍微麻烦一点。
List实现中非常重要的一点,就是定义一个头指针和一个尾指针,这样可以避免对很多的特殊情况的处理,当链表为空时就是头指针指向尾指针,另外一个就是迭代器的实现,
list的迭代器的实现比vector要麻烦许多,因为内存不连续,所有采用了内部嵌套类的方式,重载了*(解引用),++EXP(前...
分类:
编程语言 时间:
2015-08-25 16:37:20
阅读次数:
168
所实现的单链表的结构如下图所示:
循环单链表的实现,和上一篇文章单链表的实现大致相同点击打开链接,略有区别:
1:循环判断的条件不再是s == NULL或者s->next == NULL,而是他们是否等于头指针。2: 断开链表时的处理,尾节点的next不是NULL,而是指向头结点
具体细节参考上一篇文章
头文件:SCList.h
#ifndef SCLIST_H
#define...
分类:
编程语言 时间:
2015-08-21 21:34:32
阅读次数:
312
前言使用没有指针的语言模拟实现数据结构,会碰到一些莫名奇妙的问题单向循环链表之前学习的链表都是单向且最后一个节点指向空节点,如果最后一个节点指向头节点,这样就形成了一个环,名字叫单向循环列表,简称循环列表源码(JS模拟实现)包含了头指针以及尾指针的实现/** * @desc 循环链表 * * @au...
分类:
其他好文 时间:
2015-08-16 21:16:54
阅读次数:
136
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点.链表结点与函数定义如下:
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};code:
//把待删结点后面一个结点的值赋给待删结点,然后把待删结点next指针指向下下个结点,然后删除下个结点, 达到和删除待删结点一样的效果.void DeleteNod...
分类:
其他好文 时间:
2015-08-12 19:24:00
阅读次数:
112
Mergeksorted linked lists and return it as one sorted list. Analyze and describe its complexity.思路I: 选择排序每次都比较各个list的头指针所指的val,取最小的那个。时间复杂度O(n2)Result...
分类:
其他好文 时间:
2015-08-11 20:47:38
阅读次数:
121